FFmpeg — это программное обеспечение с открытым исходным кодом, используемое для создания различных библиотек и программ для обработки мультимедийных данных. FFmpeg умеет перекодировать, обрабатывать видео и изображения (изменять размеры видео, изображений, удалять шум и т. д.), упаковывать, передавать и воспроизводить видео. Как самое популярное программное обеспечение для обработки видео и изображений, оно широко используется различными компаниями из разных отраслей.
FFmpeg известен как «швейцарский армейский нож» в области аудио и видео. Это проект, о котором знают все в области аудио, видео и смежных областях. Любой, кто разбирается в обработке мультимедийного аудио и видео, будет сожалеть о мощности этого проекта.
Проект FFmpeg был основан Фабрисом Белларом в 2000 году и на данный момент эволюционировал 21 год. Сообщество FFmpeg часто взаимодействует с другими мультимедийными проектами, что является одной из причин его успеха. В начале своего создания в проекте Mplayer одновременно принимали участие многие разработчики. До сих пор разработчики проекта FFmpeg все еще во многом пересекаются с мультимедийными проектами с открытым исходным кодом, такими как VLC, MPV, dav1d, x264 и т. д. После 2004 года сообщество FFmpeg в основном возглавляет Майкл Нидермайер.
За последние 22 года взлетов и падений FFmpeg претерпел множество неудач. В 2011 году FFmpeg раскололся из-за разногласий среди основных участников, что чуть не привело к закрытию всего проекта. В конечном итоге основатель проекта Фабрис Белла решил покинуть FFmpeg, но затем он и другие ушедшие разработчики вместе создали еще один известный проект библиотеки кодеков с открытым исходным кодом Libav. FFmpeg и Libav, как и Nan Murong и Bei Qiao Feng, сегодня являются важными библиотеками кодеков для всех основных игроков, и все эти библиотеки кодеков имеют открытый исходный код и могут использоваться бесплатно без дополнительной оплаты. Однако, несмотря на то, что FFmpeg считается бесплатным для использования, он имеет открытый исходный код на основе LGPL/GPL. Это означает, что если программное обеспечение использует код FFmpeg, то части программного обеспечения, включающие эти коды, также должны быть с открытым исходным кодом, и его проект необходимо использовать источники. Пожалуйста, указывайте источник при упоминании кода и библиотек кодеков. В настоящее время FFmpeg используется не только большим количеством бесплатного программного обеспечения, но и многими крупными компаниями, такими как YouTube, iTunes, продуктами Tencent, продуктами ByteDance и т. д.
Текущее содержание статьи взято из Облако Huawei · Юньсянский читальный клуб Выпуск 13 《FFmpegот Новичок в освоении》
Сборник материалов для видеороликов клуба живого чтения,《FFmpegот Новичок в освоении》
авторда Типичный энтузиаст аудио- и видеотехники,Работал в радио- и телегиганте, а также в интернет-компании, занимающейся аудио и видео.,Иметь богатый опыт в сфере потокового аудио и видео, а также вещания по запросу.,верно WebRTC、FFmpeg и Electron Очень глубокое понимание.
Далее мы представим общие методы FFmpeg для обработки аудио и видео в нескольких главах, от более мелких к более глубоким. Друзья, которые интересуются аудио- и видеотехнологиями, могут почерпнуть из них много полезной информации.
Знания, которые можно почерпнуть из текущей статьи:
(1) Познакомьтесь с набором инструментов FFmpeg, инструментом обработки мультимедиа.
(2) Понимать формат инкапсуляции и формат кодирования аудиофайлов.
(3) Понимать формат упаковки и формат кодирования видеофайлов.
(4) Освоить метод просмотра аудио- и видеоинформации с помощью FFmpeg.
(5) Освоить общие методы обработки аудио и видео файлов FFmpeg.
FFmpeg — мультимедийный проект с открытым исходным кодом, адрес проекта: https://github.com/FFmpeg/FFmpeg.
FFmpeg был впервые разработан талантливым французским программистом Фабрисом Беллой в 2000 году. С тех пор он быстро развивается. Последняя версия — 5.0.
В настоящее время FFmpeg используется во многих проектах с открытым исходным кодом, таких как ijkplayer, VLC, MPlayer, Blender, Google Chrome и т. д.
Проект FFmpeg разделен на различные модули в зависимости от функций, включая AVFormat, AVCodec, AVFilter, AVDevice, AVUtil, swresample и swscale.
【1】AVFormat да FFmpeg модуль инкапсуляции, который реализует большую часть медиа в современной мультимедийной сфере. Формат упаковка, включая инкапсуляцию и декапсуляцию, например MP4、FLV、MKV、TS и другие форматы инкапсуляции файлов, RTMP, RTSP、HLS и другие форматы инкапсуляции сетевых протоколов. Кроме того, поддерживаются также пользовательские форматы упаковки.
【2】AVCodec да FFmpeg Модуль кодека, который реализует большую часть медиа в современной сфере мультимедиа. Формат кодека, включая кодирование и декодирование, например MPEG4、H264、H265 и другие форматы видео, AAC, MP3 и другие аудиоформаты. Кроме того, также поддерживаются пользовательские форматы кодеков.
【3】AVFilter да FFmpeg модуль фильтра, который реализует распространенные в настоящее время фильтры для аудио, видео, субтитров и т. д. Рамка для обработки зеркала.
【4】AVDevice — модуль управления устройствами FFmpeg, включая аудиоустройства и видеоустройства.
【5】AVUtil да FFmpeg инструментальный модуль.
【6】swresample да FFmpeg Модуль преобразования звука, включая передискретизацию звука, настройку количества каналов и т. д.
【7】swscale да FFmpeg Модуль преобразования видеоизображений, включая масштабирование изображения, преобразование формата пикселей и т. д.
Библиотека разработки FFmpeg:
(1), libavutilда Библиотека, содержащая упрощенные программные функции.,В том числе генератор случайных чисел,структура данных,математические процедуры,Основные мультимедийные утилитыждать。
(2), libavcodecда — это библиотека, содержащая декодеры и кодеры для аудио/видео кодеков.
(3), libavformat — Библиотека, содержащая демультиплексоры и мультиплексоры для форматов мультимедийных контейнеров.
(4), libavdeviceда Библиотека, содержащая устройства ввода и вывода для получения и рендеринга из многих распространенных программных платформ ввода-вывода мультимедиа (пакеты Video4Linux, Video4Linux2, VfWиALSA).
(5), libavfilter — библиотека, содержащая медиа-фильтры.
(6), libswscaleда Библиотека, которая выполняет высокооптимизированное масштабирование изображений и операции преобразования цветового пространства/формата пикселей.
(7), libswresampleда — это библиотека, которая выполняет высокооптимизированную передискретизацию звука, перематрицирование и операции преобразования формата семпла.
【1】ffmpeg да FFmpeg Инструменты кодека в наборе инструментов.
【2】ffplay да FFmpeg Плеер в наборе инструментов.
【3】ffprobe да FFmpeg Инструменты мультимедиа-анализа в наборе инструментов.
【1】Загрузить адрес
https://ffmpeg.org/download.html
【2】Настроить FFMPEG
[root@wbyq ffmpeg-3.0.2]#./configure --enable-shared --enable-static --prefix=$PWD/_install --enable-gpl --extra-cflags=-I/home/wbyq/pc_work/x264-snapshot-20160527-2245/_install/include --extra-ldflags=-L/home/wbyq/pc_work/x264-snapshot-20160527-2245/_install/lib --enable-ffserver --enable-ffmpeg --enable-libx264
Скомпилируйте и установите:
[root@wbyq ffmpeg-3.0.2]# make
[root@wbyq ffmpeg-3.0.2]# make install
Конфигурация компиляции FFMPEG последней версии 4.2.2:
На момент написания этого документа последняя версия FFMPEG — да4.2.2.
Метод настройки компиляции следующий:
[root@wbyq ffmpeg-4.2.2]# ./configure --enable-static --enable-shared --prefix=$PWD/_install --extra-cflags=-I/home/wbyq/pc_work/x264-snapshot-20160527-2245/_install/include --extra-ldflags=-L/home/wbyq/pc_work/x264-snapshot-20160527-2245/_install/lib --enable-ffmpeg --enable-libx264 --enable-gpl
[root@wbyq ffmpeg-4.2.2]#make
[root@wbyq ffmpeg-4.2.2]#make install
FFmpeg поддерживает множество форматов упаковки, включая форматы упаковки видео, такие как MP4, FLV, MKV и TS, форматы упаковки аудио, такие как MP3, AAC, а также форматы упаковки сетевых протоколов, такие как RTMP, RTSP и HLS. Далее мы сосредоточимся на формате упаковки видео MP4.
MP4 Формат По сути, упаковку можно считать наиболее распространенным форматом видеофайлов в повседневной жизни и работе, в основном да Зависит. отза его широкую применимость,Он не только очень хорошо поддерживается на стороне ПК (Windows, Mac, Linux).,И в нее также можно без проблем играть на мобильных терминалах (Android, iOS).
MP4 Стандарт формата ISO-14496 Part 12 и ISO-14496 Part 14. Конкретные характеристики заключаются в следующем:
【1】MP4 Файл состоит из множества Box и FullBox。
【2】FullBox да Расширение поля, в заголовке добавляется 8-битная информация о версии и 24-битная информация о флагах.
【3】Каждый Box Зависит от Header и Data Состоит из двух частей.
【4】Заголовок содержит все Длина (размер) и тип (type) ящика.
【5】Data Он содержит фактические данные, которые могут быть чистыми данными или подданными. Коробка. когда Box в Data да Серия суббоксов когда, это Box также известный как Контейнер.
Поле ftyp, обычно расположенное в начале файла, содержит тип, версию, совместимый протокол и другую информацию видеофайла MP4.
moov Контейнер содержит MP4 видеодокументинформация о медиа-данных,Он содержит два подконтейнера: mvhdиtrak.,Первый определяет информацию заголовка документа.,Последнее определяет средства массовой информациидокументвtrackинформация。
Контейнер moov обычно создается в конце файла MP4 по умолчанию. Во время онлайн-воспроизведения необходимо загрузить весь файл, прежде чем его можно будет открыть в обычном режиме. Чтобы быстро открыть видео, необходимо поместить в него контейнер moov. перед файлом MP4.
mdat Box, используемый для хранения фактического содержимого медиафайлов.
FFmpeg поддерживает множество форматов кодирования видео, таких как: MPEG4, H263, H264, H265, VP8, VP9 и т. д.
Далее сосредоточьтесь на формате кодирования видео H264.
【1】VBR: переменный битрейт, режим динамического битрейта, битрейт которого может меняться в зависимости от сложности изображения. И меняется, поэтому эффективность его кодирования относительно высока.
【2】CBR:Constant BitRate, режим постоянной скорости передачи данных, Зависит от Так как скорость кода постоянна и происходят резкие изменения картинки, QP Параметры увеличатся, качество изображения ухудшится, а полоса пропускания будет потрачена впустую, когда сцена статична. Общее качество изображения для этого режима Нестабильный.
【3】ABR:Average BitRate, режим среднего битрейта, да VBR Производная форма файла, указанного в В пределах размера статические или почти статичные части изображения используют относительно низкий трафик, а сложные части изображения используют более высокий трафик. Поток можно рассматривать как да VBR и CBR компромисс.
【1】Первое изображение последовательности GOP называется IDR изображение (немедленно обновить изображение), IDR Изображения все да I изображение в рамке,Но I-кадры не обязательно являются всеми кадрами даIDR.,Только первый I-кадр даIDR-кадр последовательности GOP.
[2] I-кадр, также называемый внутрикадровым опорным кадром, сохраняет полную картину.
【3】Полное изображение можно восстановить, используя только данные I-кадра во время декодирования.
【4】I-кадры генерируются без ссылки на другие изображения.
【5】Опорный кадр I-кадра, P-кадра и B-кадра.
[6] В I-кадрах нет необходимости учитывать векторы движения.
[7] I-кадр занимает наибольший объем данных.
【1】Кадр B,Также называется двунаправленной системой отсчета.,То есть разница между текущим кадром и предыдущим и последующим кадрами, записанными в кадре даB,Для декодирования B-кадров,Нет Ему нужно не только получить предыдущее кэшированное изображение, но и декодировать последующее изображение, наложив предыдущее и следующее изображения на данные этого кадра. Получите финальную картинку.
【2】Кадр B имеет самую высокую степень сжатия.,нода При декодированииCPUиспользовать Ставка будет выше。
【3】Кадр B да Зависит от предыдущего кадра I или P и следующего кадра P для прогнозирования.
【4】Ошибка прогнозирования и вектор движения между кадром B и предыдущим кадром I или P и следующим кадром P.
【5】Кадр B не имеет опорного кадра и не вызывает распространения ошибок декодирования.
【1】Р-кадр,Также называется прямым опорным кадром,Разница между этим кадром да и предыдущим ключевым кадром (или P-кадром),развязать При кодировании вам необходимо использовать ранее кэшированное изображение, чтобы наложить разницу, определенную в этом кадре, для создания окончательного изображения. Кадр P не имеет полного изображения. Данные — это только те данные, которые отличаются от предыдущего кадра.
【2】Кодированный кадр, который находится на 1-2 кадра позади P-кадра и I-кадра.
[3] P-кадр использует компенсацию движения для передачи разницы и вектора движения (ошибки прогнозирования) между ним и предыдущим I- или P-кадром.
【4】P-кадр относится к межкадровому кодированию с прямым предсказанием. Он относится только к предыдущему кадру I или ближайшему к нему кадру P.
【5】P-кадр может ссылаться на опорный кадр следующего P-кадра.,ХОРОШОдадо и послеBссылка на кадр。
【6】Опорный кадр P-кадра может привести к распространению ошибок декодирования.
【7】Степень сжатия P-кадра находится между I-кадром и B-кадром.
MP3 да Один из наиболее распространенных аудиоформатов, которые мы используем в повседневной жизни, также даан аудиоформат упаковки。
В повседневной жизни мы часто можем видеть аудиофайлы *.mp3, точно так же, как форматы упаковки видео mp4 и flv.
Формат упаковки MP3
Используйте следующую команду для просмотра ffmpeg Список поддерживаемых форматов упаковки: ffmpeg -formats | grep mp3
Используйте следующую команду для воспроизведения музыкального файла mp3:
Обычный режим: ffplay Подросток.mp3
Режим графика формы сигнала:ffplay -showmode 1 Подросток.mp3
Режим спектрограммы:ffplay -showmode 2 Подросток.mp3
FFmpeg поддерживает множество форматов кодирования, включая MP3, AAC, AC3 и т. д.
Далее мы сосредоточимся на формате кодирования звука MP3.
Формат кодирования MP3
MP3 Также есть аудиоформат кодирования。
и видео другое, формат видео кодирования,например H264, обычно инкапсулированный MP4 или FLV Такой формат Используется в производстве. Формат кодирования аудио MP3, затем да инкапсулируется в одно и то же имя. MP3 в формате упаковки. Их легко спутать, поэтому будьте осторожны, чтобы различать их.
Формат кодирования MP3
Используйте следующую команду для просмотраffmpeg
поддерживаетсяформат кодированиясписок:
Структура файла MP3
Структура файла MP3
Аудиодокументивидеодокумент Процесс транскодирования обычно называетсямультимедийная обработка,Облако У Huawei также есть соответствующая Обработка. медиа Сервис—— Медиа Processing Центр, аббревиатура MPC, сервис обработки мультимедийных данных, основанный на Облако Создание службы облачных вычислений Huawei для решения проблем, возникающих у клиентов самостоятельно. видеоспособность Нет Можетизбегатьиз Высокая инвестиционная стоимость、Высокий технический порогждатьвопрос,Помогите клиентам специализироваться на построении бизнес-возможностей,Быстрая доставка онлайн.
【1】Обработка видео
【2】Обработка звука
использовать FFmpeg вернозвукобработка видео,Главное перекодирование, Параметры видео、Параметры звука разделены на три части.
Принцип работы традиционной программы транскодирования показан на рисунке ниже:
【1】Пример перекодирования аудио и видео:
1. перекодирование аудио
ffmpeg -i Подросток.mp3 -acodec aac -ab 3000 -ac 1 -ar 8000 output.aac
2. Транскодирование видео
ffmpeg -i big_buck_bunny.mp4 -vcodec h263 -b:v 256000 -r 15 -s 352x288 -acodec copy
output.ts
【2】Самый простой способ перекодирования
ffmpeg -i 123.mp4 out.flv
【3】Конвертируйте любой формат в MP4.
Перекодируйте формат видео и установите частоту дискретизации звука и размер выходного видео: mpg-->mp4
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 1.mpg -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 22050 -s 300*300 1_1.mp4
Перекодируйте формат видео и установите частоту дискретизации звука и размер выходного видео (можно воспроизвести мягкое декодирование, невозможно воспроизвести жесткое декодирование): wmv-->wmv
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 2.wmv -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 48000 -s 300*300 2_1.wmv
Перекодируйте формат видео и установите частоту дискретизации звука и размер выходного видео: wmv-->mp4
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 2.wmv -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 48000 -s 300*300 2_1.mp4
Перекодируйте формат видео и установите частоту дискретизации звука: wmv-->mp4
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 2.wmv -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 48000 2_1.mp4
Перекодируйте формат видео и установите частоту дискретизации звука: wmv-->mp4
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i Video_2020-10-11_2.wmv -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 22050 Video_2020-10-11_2_1.mp4
Перекодируйте формат видео и установите частоту дискретизации звука, размер выходного видео и измените битрейт: mpg-->mp4
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 1.mpg -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 22050 -b:v 400k -s 300*300 1_1.mp4
【1】Сращивание видео
Этот метод должен гарантировать, что все видео имеют одинаковый формат и битрейт звука, иначе их невозможно будет нормально объединить.
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -f concat -safe 0 -i filelist.txt -c copy demo.mp4
Содержимое файла filelist.txt — путь к видео внутри использует относительный путь:
file 'd8381671f616468c9193defcd55eeb3b.mp4'
file 'ad6beef4b9e14bcf8f4c07d802cae360.mp4'
file '1d15bf4c221c4e429413568d5c2e58e4.mp4'
Перекодируйте формат видео и установите частоту дискретизации звука, размер выходного видео и установите частоту кадров на выходе:
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 1.mp4 -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 22050 -s 300*300 -r 30 -aspect 1_1.mp4
【2】Объедините исходные видео с разным разрешением в одно видео и установите центральное положение экрана.
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 1.mp4 -i 1.mpg -i 123.mp4 -f lavfi -i color=black -filter_complex "[0:v]format=pix_fmts=yuva420p,rotate=PI*0/180:c=none:ow=rotw(PI*0/180):oh=roth(PI*0/180),pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setpts=PTS-STARTPTS+0/TB[va0];[1:v]format=pix_fmts=yuva420p,rotate=PI*0/180:c=none:ow=rotw(PI*0/180):oh=roth(PI*0/180),pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setpts=PTS-STARTPTS+3/TB[va1];[2:v]format=pix_fmts=yuva420p,rotate=PI*0/180:c=none:ow=rotw(PI*0/180):oh=roth(PI*0/180),pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setpts=PTS-STARTPTS+7/TB[va2];[3:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,trim=duration=12[over0];[over0][va0]overlay[over1];[over1][va1]overlay[over2];[over2][va2]overlay=format=yuv420[outv];[0:a][1:a][2:a] concat=n=3:v=0:a=1[outa]" -aspect 1920:1080 -vcodec libx264 -map "[outv]" -map "[outa]" -y out.mp4
【3】Синтез микширования звука
ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 remix.mp3
Описание параметра:
-i документ 1.mp3 и 2.mp3 Для двух источников ожидается синтез документа;
-filter_complex параметры фильтра;
amix=inputs Настройте общее количество входных выборок;
duration,first:Длина зависит от первого.документ,самый длинный: длина зависит от самого длительного времени документа,shortest:Длина зависит от кратчайшего временидокумент;
dropout_transition: время перехода для перенормировки объема в конце входного потока;
-f mp3 Настроить экспортдокумент Формат;
【4】Синтез аудиосоединения
ffmpeg -i "concat:headerNew.mp3|006.mp3" -acodec copy demo6.mp3
Описание параметра:
concat слитьдокументинструкция;
【5】Эффект затухания звука
ffmpeg -i bgm3.mp3 -filter_complex afade=t=out:st=16:d=4 bgm31.mp3
Описание параметра:
afade Инструкции по исчезновению;
от st Секунды начинаются и проходят d Второйэффект исчезновения часов;
【6】Используйте конкат-фильтр FFmpeg для перекодирования (с потерями)
Синтаксис немного сложен,Но да на самом деле это не сложно. Этот метод позволяет объединять видеоклипы из разных кодеров.,ХОРОШОВ качестве резервной меры, если другие методы не сработают.。
ffmpeg -i input1.mp4 -i input2.webm -i input3.avi -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' <Опции кодировщика> output.mkv
Приведенная выше команда объединяет файлы в трех разных форматах: FFmpeg. concat Фильтр перекодирует их.。Примечание Я имею в виду этода Сжатие с потерями。
[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] Представляет видео и аудио первого входного файла, видео и аудио второго входного файла и видео и аудио третьего входного файла соответственно. конкат=n=3:v=1:a=1 Указывает, что имеется три входных документа.,выхододин кусочеквидеопотокиодин кусочек Аудиопоток。[v] [a] Что касается названия видеопотока и аудиопотока, полученных да, обратите внимание, что bash ждать shell Кавычки необходимы для предотвращения расширения подстановочных знаков.
【7】Используйте микс, чтобы объединить два звука.
ffmpeg -i g001_2.wav -i tx.wav -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 tx_new.wav
//Видео воспроизводится задом наперед, без звука
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 123.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast out.mp4
//Видео воспроизводится задом наперед, звук остается неизменным
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 123.mp4 -vf reverse out.mp4
//Аудио воспроизводится задом наперед, видео остается без изменений
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 123.mp4 -map 0 -c:v copy -af "areverse" out.mp4
//Одновременное воспроизведение аудио и видео задом наперед
C:\FFMPEG\ffmpeg_x86_4.2.2\bin\ffmpeg.exe -i 123.mp4 -vf reverse -af areverse -preset superfast out.mp4
1. Самый простой способ
ffmpeg -i 123.mp4 out.gif
2. Разместите видео MP4 преобразован в GIF
ffmpeg -i OUTPUT_VIDEO.mp4 OUTPUT_VIDEO.gif
3. Конвертируйте часть видео в GIF.
// отвидеовторой в Второйначинать,Время перехвата составляет3Второйфрагментпреобразован в gif
ffmpeg -t 3 -ss 00:00:02 -i small.mp4 small-clip.gif
4. Преобразование высокого качества GIF
ffmpeg -i OUTPUT_VIDEO.mp4 -b 2048k OUTPUT_VIDEO.gif
5. будет GIF преобразован в MP4
ffmpeg -f gif -i animation.gif animation.mp4
ffmpeg -f gif -i animation.gif animation.mpeg
ffmpeg -f gif -i animation.gif animation.webm
6. Установить время
Обычно нам нужно преобразовать только определенный временной сегмент видео, поэтому мы не можем преобразовать его напрямую, как команда в выше. Нам нужно использовать -ss (установить время начала), -t (установить продолжительность).
ffmpeg -ss время начала -t продолжительность -i входитьдокумент выходдокумент
Например: ffmpeg -ss 9 -t 5 -i 1.mp4 1.gif,Волявстречаотвидеоиз9Второйначинатьперехватывать5Второй Фрагмент преобразуется вgifкартина。-ssХОРОШОустановлен на00:00:00.000форма,для часов, минут, секунд, миллисекунд,Например00:00:09.000。
7. Установите количество петель.
-loop Количество циклов, например, установка -loop 1. Сгенерированное gif-изображение будет воспроизведено только один раз, 0 означает неограниченное количество раз (по умолчанию).
ffmpeg -ss время начала -t продолжительность -i входитьдокумент -loop Количество циклов выходдокумент
Например, ффмпег -ss 9 -t 5 -i 1.mp4 -loop 0 1.gif。
8. Установить масштаб
Если у вас видео высокого разрешения, возможно, вам придется масштабировать экран, иначе изображение в формате gif будет слишком большим. Вы можете использовать управление масштабом. Например, Scale=iw/2:-1:flags=lanczos (lanczos — это алгоритм масштабирования) установит ширину изображения gif равным половине исходного видео, а высоту — пропорциональному масштабированию. Вы также можете принудительно задать ширину и . высота пикселей, которые необходимо установить.
ffmpeg -ss время начала -t продолжительность -i входитьдокумент -loop Количество циклов -vf масштаб = ширина: высота: флаги = Ланцос выходдокумент
Например, ффмпег -ss 9 -t 5 -i 1.mp4 -loop 0 -vf scale=iw/2:-1:flags=lanczos 1.gif。
9. Установите fps (кадров в секунду)
Установка более низкого значения fps может сжать размер изображения. Используйте fps = указанное значение fps и сохраните его плавность.
ffmpeg -ss время начала -t продолжительность -i входитьдокумент -loop Количество циклов -vf "масштаб = ширина: высота: флаги = Ланцос,fps=числовое значение" выходдокумент
Например, ффмпег -ss 9 -t 5 -i 1.mp4 -loop 0 -vf "scale=iw/2:-1:flags=lanczos,fps=15" 1.gif
10. Обрезка экрана
Может быть, нам просто нужно Волявидеоэкраниз Часть его превратилась вgifкартина,Можетиспользоватьcrop,Конкретно обрезка = ширина: высота: начало ширины: начало высоты,Например, обрезка = 200:200:0:0.,Волявстречаот Горизонтальный0Пиксель,Начиная с 0 пикселей по вертикали,Экран обрезан до площади 200х200.
ffmpeg -ss время начала -t продолжительность -i входитьдокумент -loop Количество циклов -vf "масштаб = ширина: высота: флаги = Ланцос,fps=числовое значение,обрезка = ширина: высота: начало ширины: начало высоты" выходдокумент
Например: ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 -vf "scale=iw/2:-1:flags=lanczos,fps=15,crop=iw/2:ih:0:0" 1.gif, левая половина видео будет обрезана.
11. Улучшить качество изображения gif
Вы можете обнаружить, что качество изображения gif, созданного непосредственно с помощью описанного выше метода, не очень хорошее, и вы можете использовать фильтр разделения палитры, чтобы улучшить его.
ffmpeg -ss время начала -t продолжительность -i входитьдокумент -loop Количество циклов -vf "масштаб = ширина: высота: флаги = Ланцос,fps=числовое значение,обрезка = ширина: высота: начало ширины: начало высоты,split[s1][s2];[s1]palettegen[p];[s2][p]paletteuse" выходдокумент
как ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 -vf "scale=iw/2:-1:flags=lanczos,fps=15,crop=iw/2:ih:0:0,split[s1][s2];[s1]palettegen[p];[s2][p]paletteuse" 1.gif。
Вышеуказанные параметры и фильтры можно настроить в соответствии с вашими потребностями. от Выбор и настройки.
【1】Добавить водяной знак изображения
//Добавляем водяной знак изображения
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -i D:/666.mp4 -vf "movie=image/123.png[wm];[in][wm]overlay=30:10[out]" D:/linux-share-dir/video_file/test/output.mp4
Анализ параметров:
1. D:/666.mp4 Входное видео
2. image/123.png Водяной знак изображения будет добавлен
3. D:/linux-share-dir/video_file/test/output.mp4 синтез После водяного знакавыходизвидео
【2】Добавьте динамический водяной знак GIF в левом нижнем углу видео.
ffmpeg -y -i test2.mp4 -i gnore_loop 0 -i test.gif -filter_complex overlay=0:H-h test_out2.mp4
【3】Изменение времени отображения водяных знаков
1. Установите продолжительность отображения водяного знака
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=enable=\'lte(t,5)\'" out.mp4 -y
Эффект приведенной выше команды таков: водяной знак отображается только в течение 5 секунд и исчезает через 5 секунд.
2. Установите период времени отображения водяного знака
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=enable=\'between(t,5,10)\'" out.mp4 -y
Функция приведенной выше команды: позволить водяному знаку отображаться в течение 5–10 секунд видео.
3. Установите два водяных знака, которые будут появляться по очереди
ffmpeg -i big_buck_bunny.mp4 -i doggie1.png -i doggie2.png -filter_complex "overlay=enable=\'lte(mod(t,10),4)\',overlay=enable=\'gt(mod(t,10),6)\'" out.mp4 -y
Эффект приведенной выше команды таков: первый водяной знак исчезнет через 4 секунды, а второй водяной знак исчезнет через 4 секунды.
Здесь есть задание? Хуаджи Пожалуйста, поставьте два водяных знака: один в верхнем левом углу и один в верхнем правом углу.
【4】Изменение положения водяного знака
Установите водяной знак, чтобы он со временем перемещался вправо.
ffmpeg -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -lavfi "overlay=x=t*20" -shortest out.mp4 -y
Функция приведенной выше команды: заставить водяной знак перемещаться на 20 пикселей вправо каждую секунду, пока он не исчезнет.
Установите водяной знак, чтобы он перемещался влево и вправо каждые 10 секунд, пока не исчезнет.
ffmpeg -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -lavfi "overlay=enable=\'mod(t,10)\':x=\'100*mod(t,10)-w\'" -shortest out.mp4 -y
【5】Метод циклического воспроизведения водяных знаков GIF
Первый: установите для gif -ignore_loop значение 0.,Просто позвольте гифке продолжать воспроизводиться в цикле.,Команда выглядит следующим образом:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -filter_complex overlay -shortest out.mp4 -y
Но этот метод подходит только для изображений в формате gif. Если отфильтровать короткое видео, то ничего сделать не получится.
Второй тип: используйте фильтр фильма, а также позвольте GIF воспроизводиться в цикле. Хотя этот метод более сложен, это решение поддерживает водяные знаки для видео. Команда выглядит следующим образом.
ffmpeg -hide_banner -i big_buck_bunny.mp4 -vf "movie=doggie3.gif:loop=0,setpts=N/FRAME_RATE/TB[out];[0:v][out]overlay=x=main_w-overlay_w:y=0" -shortest out.mp4 -y
В приведенной выше команде есть два ключевых момента:
loop=0,setpts=N/FRAME_RATE/TB :Установить водяной знак gif бесконечный цикл
-shortest :Волявыходдокументпродолжительностьустановлен напервыйвидеодокументпродолжительность,если Нетнастраивать,Вы обнаружите, что команда продолжит выполняться и вообще не остановится.,Потому что цикл гифки бесконечен
Таким образом, GIF/короткое видео будет воспроизводиться непрерывно.
Если вы хотите, чтобы водяной знак воспроизводился один раз, а затем останавливался, просто установите для прохождения указанное выше действие eof_action следующим образом:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie3.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" out.mp4 -y
Если видео воспроизводится с самого начала и воспроизводится только один раз, если водяной знак относительно короткий, он может пройти вообще незамеченным. В этом случае вы можете установить время задержки появления водяного знака, используя опцию -itsoffset. , следующее:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -itsoffset 3 -i doggie3.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" out.mp4 -y
так,После 3 секунд воспроизведения видео,Водяной знак появится.
【6】Поворот водяного знака
если Хотите реализовать функцию вращения,нуждатьсяиспользоватьffmpegФункция цепочки фильтров,То есть: сначала поверните изображение, используемое в качестве водяного знака.,а затем накрытьвидеоначальство。
1. Водяной знак поворачивается один раз
ffmpeg -i buck.mp4 -i s1.jpg -lavfi "[1:v]format=rgba,rotate='PI/6:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" out.mp4 -y
Идея да:
Отрегулируйте ширину и высоту водяного знака, рассчитайте длину диагонали (гипоту) изображения в соответствии с законом Пифагора и установите это значение равным ширине и высоте водяного знака. Таким образом, независимо от того, как изображение повернуто, он не будет превышать заданную ширину и высоту и не будет отображаться часть изображения.
Преобразование формата пикселей отображаемого изображения в формат rgba. Если вы работали с внешним интерфейсом, вы будете знакомы с ним. повернутое изображение становится белым и полностью прозрачным, чтобы не блокировать видео
2. Чтобы предотвратить остановку вращения, используется следующая команда:
ffmpeg -i buck.mp4 -loop 1 -i s1.jpg -lavfi "[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" -shortest out.mp4 -y
На этот раз перед изображением водяного знака добавляется -loop. 1,В обычных условиях изображение водяного знака по умолчанию останавливается после однократного воспроизведения.,сохранить последний кадр,Поэтому изображение водяного знака необходимо хранить в цикле.
【1】Информация о носителе вывода
PS D:\> ffprobe -i .\jiyi.mp4
ffprobe version 4.2.2 Copyright (c) 2007-2019 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20200122
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\jiyi.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:54.15, start: 0.000000, bitrate: 574 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 960x544, 518 kb/s, 29.97 fps, 29.97 tbr, 19200 tbn, 38400 tbc (default)
Metadata:
handler_name : Core Media Video
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 47 kb/s (default)
Metadata:
handler_name : Core Media Audio
PS D:\>
【2】Информация о носителе вывода
PS D:\> ffprobe -v quiet -of json -i .\jiyi.mp4 -show_streams
{
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "High",
"codec_type": "video",
"codec_time_base": "8123/486900",
"codec_tag_string": "avc1",
"codec_tag": "0x31637661",
"width": 960,
"height": 544,
"coded_width": 960,
"coded_height": 544,
"has_b_frames": 1,
"pix_fmt": "yuv420p",
"level": 31,
"color_range": "tv",
"color_space": "bt709",
"color_transfer": "bt709",
"color_primaries": "bt709",
"chroma_location": "left",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"r_frame_rate": "30000/1001",
"avg_frame_rate": "243450/8123",
"time_base": "1/19200",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 1039744,
"duration": "54.153333",
"bit_rate": "518796",
"bits_per_raw_sample": "8",
"nb_frames": "1623",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0
},
"tags": {
"language": "und",
"handler_name": "Core Media Video"
}
},
{
"index": 1,
"codec_name": "aac",
"codec_long_name": "AAC (Advanced Audio Coding)",
"profile": "LC",
"codec_type": "audio",
"codec_time_base": "1/44100",
"codec_tag_string": "mp4a",
"codec_tag": "0x6134706d",
"sample_fmt": "fltp",
"sample_rate": "44100",
"channels": 1,
"channel_layout": "mono",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/44100",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 2387471,
"duration": "54.137664",
"bit_rate": "47025",
"max_bit_rate": "47025",
"nb_frames": "2332",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0
},
"tags": {
"language": "und",
"handler_name": "Core Media Audio"
}
}
]
}
【1】 Список аудиоустройств и камер, установленных в данный момент на компьютере.
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -list_devices true -f dshow -i dummy
【2】Запись полноэкранного изображения рабочего стола + звука
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 D:/linux-share-dir/video_file/6666.mp4
в:
audio= "" Введите здесь устройство микрофона. Первая команда — запросить аудиоустройство на компьютере. Просто передайте имя копировать.
【3】Запись камеры + аудио
Пример 1:
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="@device_pnp_\\?\usb#vid_5986&pid_2113&mi_00#6&3326332&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 D:/linux-share-dir/video_file/6666.mp4
в:
video="" Название устройства видеокамеры
audio="" Имя видео-аудиоустройства
Пример 2:
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="@device_pnp_\\?\usb#vid_5986&pid_2113&mi_00#6&3326332&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" D:/linux-share-dir/video_file/test/202108161456.mp4
【4】 Захват назначенной области рабочего стола (без звука)
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -framerate 6 -offset_x 50 -offset_y 50 -video_size 400x400 -i desktop D:/linux-share-dir/video_file/test/202108161448.mp4
【5】Соберите выделенную область рабочего стола + аудио
//Запись указанного диапазона — собираем изображение + аудио
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -framerate 6 -offset_x 50 -offset_y 50 -video_size 400x400 -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" D:/linux-share-dir/video_file/test/202108161514.mp4
【6】Дело
Составьте список устройств
ffmpeg -list_devices true -f dshow -i dummy
полноэкранное видео ( запись экрана dshow, Кодировка H264 )
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 e:/temp/temp.mkv
полноэкранное видео ( gdigrab запись экрана, Кодировка H264 )
ffmpeg -f gdigrab -i desktop -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 e:/temp/temp.mkv
полноэкранное видео ( gdigrab запись экрана, кодировка vp9 )( Примечание : dshow не поддерживает vp9 )
ffmpeg -f gdigrab -i desktop -f dshow -i audio="virtual-audio-capturer" -vcodec libvpx-vp9 -acodec libmp3lame -s 1280x720 -r 15 e:/temp/temp.mkv
Региональное видео ( Начальная точка: 100,60 width:600 width:480 )
ffmpeg -f gdigrab -i desktop -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -acodec libmp3lame -video_size 600x480 -offset_x 100 -offset_y 60 -r 15 e:/temp/temp.mkvC:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="screen-capture-recorder" screen-capture.mp4
window (установить dshow)
ffmpeg -rtbufsize 100M -f dshow -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -preset veryfast -crf 22 -tune:v zerolatency -pix_fmt yuv420p -s '+size+r' -acodec libmp3lame -t ' + str(times) + ' ' + filename
Перечислите аудиоустройства и устройства камеры, установленные в данный момент на компьютере.
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -list_devices true -f dshow -i dummy
//Запись во весь экран
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 D:/linux-share-dir/video_file/6666.mp4
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="screen-capture-recorder" screen-capture.mp4
window (установить dshow)
ffmpeg -rtbufsize 100M -f dshow -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -preset veryfast -crf 22 -tune:v zerolatency -pix_fmt yuv420p -s '+size+r' -acodec libmp3lame -t ' + str(times) + ' ' + filename
Перечислите аудиоустройства и устройства камеры, установленные в данный момент на компьютере.
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -list_devices true -f dshow -i dummy
//Запись во весь экран
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" -vcodec libx264 -acodec libmp3lame -s 1280x720 -r 15 D:/linux-share-dir/video_file/6666.mp4
Это нормально – запись в полноэкранном режиме без звука
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -framerate 10 -i desktop D:/linux-share-dir/video_file/test/666.mp4
Это да, --- но есть проблема с захватом позиции.
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="screen-capture-recorder" -crf 22 -r 10 D:/linux-share-dir/video_file/test/666.mp4
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" -vcodec libx264 -acodec aac -s 1280x720 -r 10 D:/linux-share-dir/video_file/6666.mp4
в:
audio= "" Введите здесь устройство микрофона. Первая команда — запросить аудиоустройство на компьютере. Просто передайте имя копировать.
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="массив микрофонов (Conexant SmartAudio HD)" -vcodec libx264 -acodec aac -s 1280x720 -r 10 D:/linux-share-dir/video_file/test/6666.mp4
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="массив микрофонов (Conexant SmartAudio HD)" -vcodec libx264 -acodec aac -video_size 100x100 -offset_x 500 -offset_y 500 -r 10 D:/linux-share-dir/video_file/6666.mp4
//Собираем камеру
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="Integrated Camera" -f dshow -i audio="virtual-audio-capturer" D:/linux-share-dir/video_file/test/202108161421.mp4
//Собираем камеруикомпьютер Аудио. Это нормально
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="Integrated Camera" -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" D:/linux-share-dir/video_file/test/202108161443.mp4
//Запись указанного диапазона--Собрать изображения--Это нормально
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -framerate 6 -offset_x 50 -offset_y 50 -video_size 400x400 -i desktop D:/linux-share-dir/video_file/test/202108161448.mp4
//Собираем камеруикомпьютер Аудио. Это нормально
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f dshow -i video="@device_pnp_\\?\usb#vid_5986&pid_2113&mi_00#6&3326332&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" D:/linux-share-dir/video_file/test/202108161456.mp4
//Запись указанного диапазона — собираем изображение + аудио
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -f gdigrab -framerate 6 -offset_x 50 -offset_y 50 -video_size 400x400 -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{6E399CBA-5F7D-443F-9071-1657DE0F5483}" D:/linux-share-dir/video_file/test/202108161514.mp4
fmpeg.exe -f dshow -i video=\"@device:pnp:\\\\?\\usb#vid_5986&pid_2113&mi_00#6&3326332&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global\" -f dshow -i audio=\"Микрофонный массив (Conexant SmartAudio HD)\" C:/Users/11266/Videos/2021-8-16-16-35-44-426.mp4\n"
【1】Удалить исходный звук видео и добавить новый звук.
(1) Удалите оригинальный звук из видео:
C:\FFMPEG\ffmpeg_x86_4.2.2\bin>ffmpeg.exe -i 123.mp4 -c:v copy -an out1.mp4
(2) Объединить аудио с видео:
C:\FFMPEG\ffmpeg_x86_4.2.2\bin>ffmpeg.exe -i out1.mp4 -i Цветочница-Xiner.mp3 out2.mp4
Время синтеза можно указать:
C:\FFMPEG\ffmpeg_x86_4.2.2\bin>ffmpeg.exe -i out1.mp4 -i Цветочница-Xiner.mp3 -t 30 out3.mp4
в-tпараметрдауказанное время.единицада Второй.
【2】Сохраните видео в исходном виде и добавьте новый звук.
ffmpeg -i Цветочница-Xiner.mp3 -i 123.mp4 -filter_complex amix=inputs=2 output.mp4
【3】Заменить звук исходного видео.
ffmpeg -i tx_new.wav -i r001_2.flv -shortest -c copy n001_2.flv
【1】Добавьте водяной знак в верхнем левом углу изображения (абсцисса 10, ордината 100):
wbyq@wbyq:/mnt/hgfs/linux-share-dir$ ffmpeg -i 123.mp4 -vf "drawtext=fontfile=simhei.ttf: text=‘DS Сяолун брат’:x=100:y=10:fontsize=24:fontcolor=white:shadowy=2" output.mp4
Описание параметра
файл шрифта: тип шрифта --Если simhei.ttf не найден, вы можете скопировать его из каталога Fonts в Windows и поместить в каталог выполнения программы-
текст: текстовый контент, который будет добавлен
размер шрифта: размер шрифта
fontcolor: цвет шрифта
【2】Общие случаи
Положение водяного знака: (x,y)=(10,10)<=(left,top)Расстояние влево、Топ каждого10Пиксель;
Отображение времени текстового водяного знака
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2.mp4 -i C:\Users\heshiping\Desktop\videoDown\4.jpg -filter_complex overlay=x='if(between(t,15,30),150,NAN)':0 -threads 5 -preset ultrafast C:\Users\heshiping\Desktop\videoDown\15-30s.mp4
прозрачность
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2.mp4 -i C:\Users\heshiping\Desktop\videoDown\4.jpg -filter_complex "[1:v]colorkey=0x000000:0.6:1.0[ckout];[0:v][ckout]overlay=10:10[out]" -map "[out]" -threads 5 -preset ultrafast C:\Users\heshiping\Desktop\videoDown\xuanzhuans.mp4
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2.mp4 -i C:\Users\heshiping\Desktop\videoDown\4.jpg -filter_complex "[1:v]scale=100:100[wm];[0:v][wm]overlay=x='if(between(t,15,30),150,NAN)':50[HSP];[HSP]colorkey=0x000000:0.6:1.0[ckouts];[0:v][ckouts]overlay=150:50[out]" -map "[out]" -threads 5 -preset ultrafast C:\Users\heshiping\Desktop\videoDown\Zoom прозрачность отображения времени location.mp4
синтез
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2.mp4 -i C:\Users\heshiping\Desktop\videoDown\4.jpg -filter_complex "[1:v]scale=500:500[sf];[0:v][sf]overlay=x='if(between(t,10,30),300,NAN)':150[cc];[cc]colorkey=0x000000:0.6:1.0[tmd];[0:v][tmd]overlay=300:150[out]" -map "[out]" -threads 5 -preset ultrafast -max_muxing_queue_size 1024 C:\Users\heshiping\Desktop\videoDown\111.mp4
ffmpeg
-i C:\Users\heshiping\Desktop\videoDown\2.mp4
-i C:\Users\heshiping\Desktop\videoDown\4.jpg
-filter_complex "[1:v]scale=500:500[sf];[0:v][sf]overlay=x='if(between(t,10,30),300,NAN)':150[cc];[cc]colorkey=0x000000:0.6:1.0[tmd];[0:v][tmd]overlay=300:150[out]"
-map "[out]"
-threads 5 -preset ultrafast
C:\Users\heshiping\Desktop\videoDown\final.mp4
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2.mp4 -i C:\Users\heshiping\Desktop\videoDown\4.jpg -filter_complex "[1:v]scale=500:500[sf];[0:v][sf]overlay=x='if(between(t,10,30),300,NAN)':150[cc];[cc]colorkey=0x000000:0.6:1.0[tmd];[0:v][tmd]overlay=300:150[out]" -map "[out]" -threads 5 -preset ultrafast -max_muxing_queue_size 1024 C:\Users\heshiping\Desktop\videoDown\111.mp4
//переворачиваем вертикально
ffmpeg -i C:\\Users\\heshiping\\Desktop\\videoDown\\1.jpg -vf vflip -y C:\\Users\\heshiping\\Desktop\\videoDown\\1s.jpg
//переворачиваем по горизонтали
ffmpeg -i C:\\Users\\heshiping\\Desktop\\videoDown\\66.webm -vf hflip -y C:\\Users\\heshiping\\Desktop\\videoDown\\66.webm
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\4.jpg -vf vflip -y C:\Users\heshiping\Desktop\videoDown\vflip.jpg
delogo Уберите логотип где-нибудь в видео. Фактически принцип реализации заключается в выполнении обработки размытия по Гауссу на заданной области.
delogo=x=0:y=0:w=100:h=77:band=10
x,y,w,h Создает Rect с интенсивностью размытия полосы.
removelogo , удалить водяной знак логотипа, логотип похожий.
Водяной знак видео прозрачность
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\21.mp4 -itsoffset 5 -i C:\Users\heshiping\Desktop\videoDown\c.webm -filter_complex [1:v]scale=900:500[sf];[sf]format=yuva444p,colorchannelmixer=aa=0.5[sf];[0:v][sf]overlay=x='if(between(t,5,13),0,NAN)':0 -y C:\Users\heshiping\Desktop\videoDown\eric1.mp4
Водяной знак видеоповернуть прозрачным
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\21.mp4 -itsoffset 10 -i C:\Users\heshiping\Desktop\videoDown\c.webm -filter_complex [1:v]scale=300:200[sf];[sf]format=yuva444p,colorchannelmixer=aa=0.6[sf];[sf]rotate='45*PI/180:ow=hypot(iw,ih):oh=ow:c=none'[sf];[0:v][sf]overlay=x='if(between(t,10,18),100,NAN)':100 C:\Users\heshiping\Desktop\videoDown\ccccc.mp4 -y
Переходный фильтр
ffmpeg -i /data/video/tencent/anime/a8dukd400400_Ultraman Zeta_Mandarin version_18_mp4/a8dukd400400_Ultraman Zeta_Mandarin version_18_001121_001142.mp4 -i /data/video/tencent/anime/a8dukd400400_Ultraman Zeta_Mandarin version_18_mp4/a8dukd400400_Ultraman Zeta_Mandarin version_18_001100_001121.mp4 -filter_complex "[0:v]split[v0a][v0b];[v0a]trim=0:20[v0020];[v0b]trim=20:21,setpts=PTS-STARTPTS[v02021];[1:v]split[v1a][v1b];[v1a]trim=0:20[v1020];[v1b]trim=20:21,setpts=PTS-STARTPTS[v12021];[v02021][v1020]gltransition=duration=2:source=/usr/local/src/ffmpeg-gl-transition/gl-transitions/transitions/InvertedPageCurl.glsl[g01];[v0020][g01][v12021]concat=n=3[outv];[outv]scale=1920:1080[outv]" -map "[outv]" -c:v libx264 -profile:v baseline -preset slow -movflags faststart -pix_fmt yuv420p -threads 5 -preset ultrafast /data/video/ovwq2f20210322171622763.mp4 -y
Текстовый водяной знак в любой позиции
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2021.mp4 -vf "drawtext=fontfile=MengNaJianCaiYun-2.ttf: text='heshiping':x=100:y=100:fontsize=29:fontcolor=yellow:shadowy=2" -b:v 3000k C:\Users\heshiping\Desktop\videoDown\222222.mp4 -y
прокручиваемый текстовый водяной знак
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2021.mp4 -vf "drawtext=fontfile=Arial.ttf: text='hu': y=h-line_h-10:x=(mod(2*n\,w+tw)-tw):fontsize=34:fontcolor=yellow:shadowy=2" -b:v 3000k C:\Users\heshiping\Desktop\videoDown\222222.mp4 -y
Нижний текстовый водяной знак
ffmpeg -i C:\Users\heshiping\Desktop\videoDown\2021.mp4 -vf "drawtext=fontfile=Arial.ttf:text='pruduction by http\://baidu.com':y=h-line_h-20:x=(w-text_w)/2:fontsize=34:fontcolor=yellow:shadowy=2" -b:v 3000k C:\Users\heshiping\Desktop\videoDown\222222.mp4 -y
горизонтальное движение
ffmpeg -y -i demo.mp4 -vf drawtext=arialbd.ttf:text=HelloWorld:x=w-t*5:fontcolor=red:fontsize=30 demo_drawtext_h_dyn.mp4
вертикальное движение
ffmpeg -y -i demo.mp4 -vf drawtext=arialbd.ttf:text=HelloWorld:x=w/2:y=h-t*5:fontcolor=red:fontsize=30 demo_drawtext_v_dyn.mp4
【1】Случай 1
ffmpeg.exe -ss 10 -t 15 -accurate_seek -i love.flv -codec copy -avoid_negative_ts 1 cut.flv
Объяснение параметра:
ffmpeg.exe -ss <время начала-Второй> -t <перехватить назад-Второй> -accurate_seek -i <входитьвидеодокументимя> -codec copy -avoid_negative_ts 1 <выходвидеодокументимя>
Параметры аудио и видео можно указать индивидуально:
-vcodec copy Сохраняйте исходную частоту кадров видео
-acodec copy Сохраните исходную частоту дискретизации видео-аудио и номер канала.
-codec copy Эта инструкция включает в себя две приведенные выше инструкции.
【2】Случай 2
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.ts
-i : Укажите видео
-ss : время начала
-t : Указанная обрезка Второйчисло
【3】Случай 3
ffmpeg -i organ.mp3 -ss 00:00:xx -t 120 output.mp3
Описание параметра:
-i документ,orgin.mp3 Для исходного документа, подлежащего обработке;
-ss Время обрезки,Вырез пяткивремя начала,а также -t сокращение времени;
output.mp3 для обработки результатовдокумент;
Видео в формате FLV не может быть получено напрямую через вывод json с помощью ffprobe, как и другие видео. Время можно получить, перехватив период времени и преобразуя его через вывод командной строки.
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start("C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffprobe.exe -i D:/test1080.flv");
process.waitForFinished();
process.waitForReadyRead();
QString str = process.readAllStandardOutput();
process.close();
//Анализируем строку
const char *src=str.toStdString().c_str();
char *p1=strstr(src,"Duration");
if(p1)
{
int addr=p1-src;
str = str.mid(addr+10);
str =str.section(',', 0,0);
qDebug("Продолжительность видео (стандартное время): %s",str.toStdString().c_str());
//анализируем данные
QTime t1=QTime::fromString(str);
int time_ms=t1.hour()*60*60*1000+t1.minute()*60*1000+t1.second()*1000+t1.msec();
qDebug()<<"Максимальная длина видео (мс):"<<time_ms;
//Обратный анализ и сравнение
qDebug()<<"Продолжительность восстановленного видео (стандартное время):"<<QTime(0,0,0,0).addMSecs(int(time_ms)).toString(QString::fromLatin1("HH:mm:ss.zzz"));
}
Результат вывода:
Продолжительность видео (стандартное время): 00:06:37.15
Максимальная длина видео (мс): 397150
Продолжительность восстановленного видео (стандартное время): "00:06:37.150"
//Появление
ffmpeg -i in.mp4 -vf fade=in:0:90 out.mp4
//черно-белое
ffmpeg -i in.mp4 -vf lutyuv="u=128:v=128" out.mp4
//заострить
ffmpeg -i in.mp4 -vf unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5 out.mp4
//Уменьшаем резкость
ffmpeg -i in.mp4 -vf unsharp=7:7:-2:7:7:-2 out.mp4
//Виньетирование
ffmpeg -i in.mp4 -vf vignette=PI/4 out.mp4
//мерцание виньетирование
ffmpeg -i in.mp4 -vf vignette='PI/4+random(1)*PI/50':eval=frame out.mp4
//Видео дрожит
ffmpeg -i in.mp4 -vf crop="in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2+((in_h-out_h)/2)*sin(n/7)" out.mp4
//Изменения цвета
ffmpeg -i in.mp4 -vf hue="H=2*PI*t:s=sin(2*PI*t)+1" out.mp4
//размытие
ffmpeg -i in.mp4 -vf boxblur=5:1:cr=0:ar=0 out.mp4
// Зеркальный переворот
ffmpeg -i in.mp4 -vf crop=iw/2:ih:0:0,split[left][tmp];[tmp]hflip[right];[left]pad=iw*2[a];[a][right]overlay=w out.mp4
//переворачиваем по горизонтали
ffmpeg -i in.mp4 -vf geq=p(W-X\\,Y) out.mp4
//переворачиваем вертикально
ffmpeg -i in.mp4 -vf vflip out.mp4
//эффект рельефа
ffmpeg -i in.mp4 -vf format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2' out.mp4
//равномерный шум
ffmpeg -i in.mp4 -vf noise=alls=20:allf=t+u out.mp4
Ежедневный монтаж видео,После обрезки видео могут быть некоторые эффекты,Как и ожидалось,Начало с 00 секунд,Завершится через 30 секунд,Всего 30 секунд видео,Но обрезав некоторые видео, вы обнаружите, что начало и конец могут быть не очень точными.,возможныйдаот Начало с 00 секунд,33Второй закончился. Почему это? Потому что в этих видео нет ключевого кадра длиной 30 секунд, и ffmpeg подстроится к ближайшему ключевому кадру рядом с введенным вами моментом времени, а затем сделает следующее. Если вы не понимаете ключевые кадры, не беда, это не повлияет на использование этой команды. Если требования вашего проекта допускают ошибку в несколько секунд, то эта команда может полностью удовлетворить ваши потребности, и нет необходимости читать следующий контент. Если требования в вашем проекте очень строгие, вы должны прибыть в определенное время. Тогда нам придется использовать другой метод. Вышеизложенное приводит к тому, чтодавыбраноизчасмежду Нетдаключевой кадр,Чтоеслинас Воля Входное видео Сначала конвертировать во всеизрамкиключевой кадризвидео,На самом деле простода Воля Все кадры кодируются ввнутрикадровое кодирование
ffmpeg -i r001.flv -strict -2 -qscale 0 -intra r002.flv
# Преобразование ключевых кадров внутрикадровое кодирование
Вырезать первые 6 секунд видео
ffmpeg -t 00:00:06 -i r002.flv -vcodec copy -acodec copy r001_1.flv
# обозначениевремя началаи Заканчиватьчасмежду
# ffmpeg -ss 00:00:00 -t 00:00:06 -i r002.flv -vcodec copy -acodec copy r001_1.flv
# -ss обозначениеот Чточасмеждуначинать
# -t Укажите, сколько времени потребуется на перехват
# -i обозначениевходитьдокумент
# отr002.mp4видеоизвлечено из Аудио,документ Имяr002.wav,Формат: wav.
ffmpeg -i g001_2.flv -vn -acodec копия g001_2.wav
Этот параметр команды для изменения громкости,существоватьсинтез Аудионазад,Возможно, это потому, что оригинальное видео очень громкое.,Но звук спецэффектов невелик,заставляя его звучать громче и тише,В этом случае вы можете регулировать громкость равномерно.
0,5x
ffmpeg -i input.wav -af "volume=0.5" output.wav
1,5x
ffmpeg -i input.wav -af "volume=1.5" output.wav
Используйте децибелы
ffmpeg -i input.wav -af "volume=5dB" output.w
ffmpeg -i 001.mp4 -vf ass=demo.ass -b:v 3000K r001.flv
【1】Добавьте анимацию на 6-й секунде видео.
ffmpeg -re -i n001_2.flv -vf "movie=dianzan.mov,scale=200*200[test]; [in][test] overlay=x=400:y=100:eof_action=2 [out]" -vcodec libx264 g001_2.flv
#илииспользовать gif ХОРОШО 0 повторить 1 Нетповторить
Пояснение команды: Добавить движущееся изображение к видео r001_2.
【1】Прокрутка слева направо.
ffmpeg -i input.mp4 -vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=foo.ttf: y=h-line_h-10:x=(mod(5*n\,w+tw)-tw): fontcolor=white: fontsize=40: shadowx=2: shadowy=2" output.mp4
【2】Прокрутка справа налево.
ffmpeg -i input.mp4 vf "drawtext=text=string1:fontfile=foo.ttf:y=h-line_h-10:x=w-(t-4.5)*w/5.5:fontcolor=white:fontsize=40:shadowx=2:shadowy=2" output.mp4
【3】Прокрутка справа налево, продолжительность одной прокрутки составляет 10 секунд, интервал прокрутки — 30 секунд.
ffmpeg -i input.mp4 -filter:v drawtext="fontfile=Microsoft YaHei Mono.ttf:text='Hello World':fontcolor=white@1.0:fontsize=36:y=h-line_h-10:x=w-tw-w/10*mod(t\,30):enable=gt(mod(t\,20)\,10)" -codec:v libx264 -codec:a copy -y output.mp4
【1】Различия между программным и аппаратным кодированием
Транскодирование видеочасесливстретитьсявидеоотносительно большой、часочень длинныйизчасждать,Транскодирование и подавление занимают много времени и нагружают процессор.,Поэтому мне было интересно, есть ли способ ускорить процесс перекодирования., поэтому в этой статье описывается, как FFMPEG вызывает видеокарту для преобразования формата. кодирование подавили для ускорения.
Разница между мягкими и жесткими кодеками: Мягкое кодирование: использование процессора для кодирования жестко закодированный:использовать НетCPUКодировать,Например, видеокартаGPU、Выделенный DSP、FPGA、Ожидание чипа ASIC
Разница между мягкими и жесткими кодеками: Мягкое кодирование: прямое и простое в реализации, легко настраиваемые параметры и легкое обновление, но загрузка ЦП большая, а производительность ниже, чем при жестком кодировании. Качество при низких скоростях передачи данных обычно лучше, чем при жестком кодировании. жестко закодированный:Высокая производительность,Низкий битрейт обычно имеет более низкое качество, чем мягкие кодеры.,Однако некоторые продукты перенесли отличные алгоритмы мягкого кодирования (например, X264) на аппаратную платформу графического процессора.,Качество в основном такое же, как и у мягкого кодирования.
【2】Проверьте поддерживаемые методы аппаратного ускорения.
D:\out>ffmpeg -hwaccels
Hardware acceleration methods:
cuda
dxva2
qsv
d3d11va
qsv
cuvid
Вышеприведенный вывод представляет методы аппаратного ускорения, поддерживаемые системой, которые будут использоваться позже.
Объяснение жестко запрограммированного суффикса
qsv: технология быстрой синхронизации видео видеокарты Intel (быстрая синхронизация видео)
nvenc: аппаратный видеокодер для видеокарт nvidia (аппаратный видеокодер nvidia)
cuvid: старое название nvdec, только конец декодирования.
куда: то же, что и выше
amf: аппаратный кодер amf для видеокарты AMD (аппаратный кодер AMD)
Практически все компьютеры Intel поддерживают метод qsv.
【3】Команда аппаратного ускорения
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -s 1920x1080 output.mp4
Пояснение общих параметров команды -hwaccel cuvid: аппаратное ускорение с использованием cuvid -c:v h264_cuvid: использовать h264_cuvid для декодирования. -c:v h264_nvenc: кодирование с использованием h264_nvenc (аппаратное ускорение nvidia x265) -b:v 2000k: Битрейт, чем выше значение, тем четче будет. -s 1920x1080: разрешение -b:v 3500K : Средняя скорость передачи видео 3500K -bufsize 6000К: размер буфера 6000K, рекомендуется установить значение Текущая частота кода и частота кадров равны 5, возможно, здесь 2pass предназначен для буфера и кэширования на следующие 5 с. -maxrate 5000K: максимальная скорость передачи данных 5000К, максимальная скорость передачи каждого кадра не превышает этого значения -preset медленно: схема по умолчанию да медленно, медленно — это уже лучший вариант -pix_fmt p010le: Формат выходных пикселей да p010le То есть 10бит, его поддерживает только новое железо, например: 970м не поддерживает, а 1070 может поддерживать.
【4】Используйте CUDA и CUVID для декодирования.
1. использовать CUDA Пример расшифровки:
ffmpeg -hwaccel cuda -i input output
2. использовать CUVID Пример расшифровки:
ffmpeg -c:v h264_cuvid -i input output
3. использовать NVDEC и NVENC Выполните полное аппаратное перекодирование:
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -c:v h264_nvenc -preset slow output
4. если ffmpeg да поддерживает libnpp скомпилирован, его можно использовать для компиляции на основе GPU Скейлер вставляется в цепочку:
ffmpeg -hwaccel_device 0 -hwaccel cuda -i input -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow output.mkv
Опцию -hwaccel_device можно использовать для указания ffmpeg средней жесткостиразвязатькод дляиспользоватьиз GPU。
【5】Использовать декодирование qsv
1. Кодированиеиспользование аппаратного обеспечения
ffmpeg.exe -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-2.mp4
2. Декодирование также определяет аппаратное декодирование.
ffmpeg.exe -c:v h264_qsv -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-3.mp4
3. Укажите аппаратное ускорение qsv
ffmpeg.exe -hwaccel qsv -c:v h264_qsv -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-4.mp4
Возникает ошибка при конвертации видео, снятого на мобильный телефон. Поскольку видео, снятое мобильным телефоном, содержит информацию о повороте, добавление входного параметра -noautorotate:
ffmpeg.exe -hwaccel qsv -c:v h264_qsv -noautorotate -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-5.mp4
【6】Дело
Вырезать видеоклипы
если Входное видео Формативыходизвидео Форматтакой же. Можетпрямойиспользовать -vcodec copy -acodec copy параметр. может ускорить время
ffmpeg -hwaccel dxva2 -ss 00:00:10.100 -t 00:00:15.100 -i "D:/test1080.flv" -vcodec copy -acodec copy "D:/linux-share-dir/video_file/output1.mp4"
если Входное видео Формативыходизвидео Формат Неттакой же,Его необходимо перекодировать. Нетспособныйиспользовать -vcodec copy -acodec copy параметры, в противном случае будет сообщено об ошибке.
ffmpeg -hwaccel dxva2 -ss 00:00:10.100 -t 00:00:15.100 -i "D:/Video_WMVвидеодокумент.wmv" -c:v h264_qsv "D:/linux-share-dir/video_file/output1.mp4"
ffmpeg -hwaccel dxva2 -ss 00:00:10.100 -t 00:00:15.100 -i "D:/test1080.flv" -c:v h264_qsv "D:/linux-share-dir/video_file/output1.mp4"
(1) Удалить исходный звук из видео: -- очень быстро --- не очень много времени -- игнорируется
ffmpeg -hwaccel dxva2 -i "D:/test1080.flv" -c:v copy -an "D:/linux-share-dir/video_file/output1.mp4"
(2) Объединить аудио с видео:---повторноCPUкодирование--платежчасмежду
ffmpeg -hwaccel dxva2 -i "D:/linux-share-dir/video_file/output1.mp4" -i "C:/Users/11266/Music/xiaola.mp3" "D:/linux-share-dir/video_file/output2.mp4"
(3) Объединение аудио с видео: --- требуется перекодирование -- отнимает много времени -- вы можете выбрать аппаратное кодирование графического процессора --- очень быстро
ffmpeg -hwaccel dxva2 -i "D:/linux-share-dir/video_file/output1.mp4" -hwaccel dxva2 -i "C:/Users/11266/Music/xiaola.mp3" -c:v h264_qsv "D:/linux-share-dir/video_file/output2.mp4"
Преобразование параметров видео-аудио:
ffmpeg -i "D:/test1080.flv" -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 48000 out1.mp4
//Добавляем водяной знак изображения
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -i D:/666.mp4 -vf "movie=D:/linux-share-dir/video_file/test/image/123.png[wm];[in][wm]overlay=30:10[out]" D:/linux-share-dir/video_file/test/output1.mp4
Анализ параметров:
1. D:/666.mp4 Входное видео
2. image/123.png Водяной знак изображения будет добавлен
3. D:/linux-share-dir/video_file/test/output.mp4 синтез После водяного знакавыходизвидео
//Аппаратное декодирование, программное кодирование --- в основном кодирование требует времени --- это все еще очень медленно
ffmpeg -hwaccel dxva2 -i "D:/test1080.flv" -vf "movie=123.png[wm];[in][wm]overlay=30:10[out]" "D:/linux-share-dir/video_file/output1.mp4"
//аппаратное обеспечениеразвязатькод、программное обеспечениекодирование---основнойдакодированиепотреблятьчасмежду---использоватьGPUаппаратное обеспечениекодирование,намного быстрее
ffmpeg -hwaccel dxva2 -i "D:/test1080.flv" -vf "movie=123.png[wm];[in][wm]overlay=30:10[out]" -c:v h264_qsv "D:/ linux-share-dir/video_file/output1.mp4"
Очень удобно использовать ffmpeg для создания скриншотов видео, ffmpeg Указав -vcodec Параметры mjpeg, или укажите -f Параметры mjpeg, вы можете вывести Скриншот в формате jpg, указан -vcodecПараметрыpng,или Укажите расширение выходного документа как png,Можетвыходpngскриншот。еслипараметробозначение Неткогда,Приведёт к очень медленной обработке ffmpeg.
1. выход jpg
ffmpeg -ss 00:00:05 -i RevolutionOS.rmvb sample.jpg -r 1 -vframes 1 -an -vcodec mjpeg
2. выход png
ffmpeg -ss 00:00:05 -i RevolutionOS.rmvb sample.png -r 1 -vframes 1 -an -vcodec mjpeg
Примерно через 1 секунду сгенерированное изображение jpg имеет размер 19К, тогда как изображение в формате png — 222К, что во много раз больше, но с точки зрения качества особой разницы нет, поэтому я решил сгенерировать формат jpg.
3. Скриншот через 50 минут
ffmpeg -ss 00:50:00 -i RevolutionOS.rmvb sample.jpg -r 1 -vframes 1 -an -vcodec mjpeg
илииспользовать -f параметробозначениевыходиз Форматдля mjpeg , тот же эффект
ffmpeg -ss 00:50:00 -i RevolutionOS.rmvb sample.jpg -r 1 -vframes 1 -an -f mjpeg
Заказ Пример:
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -i D:/123.mp4 -vf "scale=100:100,pad=500:500:0:300:black" D:/linux-share-dir/video_file/output.mp4
Объяснение параметра:
500:500 размер холста . (w:h)
100:100 Размер видеокадра на холсте - пропорционально масштабирован. (w:h)
0:300 Положение видеокадра на экране. (x:y)
black Цвет фона холста
если Есть нескольковидеодокумент После добавления черных рамок,назад续还нуждатьсясинтезодинвидео,Можетсуществоватьвыходизчасждать统一重新采样:
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -i D:/Produce.mpg -vf "scale=100:100,pad=500:500:0:300:black" -y -qscale 0 -vcodec libx264 -acodec aac -ac 1 -ar 22050 -s 500*500 -r 30 D:/linux-share-dir/video_file/test/output3.mp4
разрешение、Частота кадров、Частота дискретизации звука непостоянна, и видео невозможно правильно объединить.
Конвертировать видео в картинку:
# ffmpeg -i 123.mp4 image_%d.jpg
Воля 123.mp4 Каждый кадр видео сохраняется в виде изображения.
Преобразование изображения в видео:
# ffmpeg -f image2 -i image_%d.jpg video.mpg
RTMPдаReal Time Messaging Акроним протокола (протокол обмена сообщениями в реальном времени). Протокол прикладного уровня на основе TCP, разработанный компанией Adobe и который также является семейством протоколов прикладного уровня, как и RTMP или HTTP/HTTPS. RTMP обычно передается по TCP-каналу даflv Форматпоток。пожалуйста Примечаниезначение,RTMPда Сетевой транспортный протокол,иflvнодавидеоиз Формат упаковки。flvФормат упаковкиразработанныйизглазизда Для использования при передаче по сетииспользоватьиз,поэтомуRTMP+FLVМожетобъяснятьда”золотой партнер“。
RTMPСоглашение включает в себя:основное соглашение иRTMPT/RTMPS/RTMPEждать Множество вариантов。отвидеообучение протоколу:推поток拉поток都擅长из RTMP узнал, что семейство протоколов RTMP имеет следующие интересные моменты, на которые читателям может быть интересно обратить внимание:
RTMPРаботасуществоватьTCPвыше,по умолчаниюиспользоватьпорт1935,этотиндивидуальныйдаосновная форма;
RTMPE добавляет функции шифрования на основе RTMP;
RTMPT инкапсулируется в HTTP-запросы и может проникать через межсетевые экраны;
RTMPS аналогичен RTMPT, добавляя функции безопасности TLS/SSL;
RTMFPиспользоватьUDPпередачаизRTMP;
(1). Запуск в Linux: Передача локального аудио и видео в реальном времени на сервер потоковой передачи.
Пример:
[wbyq@wbyq linux_c]$ ffmpeg -f video4linux2 -r 12 -s 640x480 -i /dev/video0 -f alsa -i default -ar 44100 -ac 1 -f mp3 -qscale 10 -f flv "rtmp://127.0.0.1:8086/live/123"
Анализ параметров:
-f video4linux2 Укажите структуру видеодрайвера под Linux
-s 640x480 Укажите размер видео
-i /dev/video0 узел камеры
f alsa Структура драйвера звуковой карты
-i default Выберите звуковую карту, здесь выберите звуковую карту по умолчанию.
-ar 44100 частота дискретизации звука
-ac 1 мононуклеоз
-f mp3 MP3-аудио
-qscale 10 Установите качество изображения. Чем меньше значение, тем выше качество изображения.
f flv обозначение Формат упаковки
"rtmp://127.0.0.1:8086/live/123" Адрес сервера потокового мультимедиа
(2). Linux пропускает поток и сохраняет видео локально.
Пример:
[wbyq@wbyq linux-share-dir]$ ffmpeg -thread_queue_size 128 -f video4linux2 -r 12 -s 1280x720 -i /dev/video0 -f alsa -i default -ar 44100 -ac 1 -f mp3 -qscale 5 -f flv "rtmp://127.0.0.1:8086/live/123" output.h264
Анализ параметров:
Когда эта задача требует много денег, -thread_queue_size Вы должны установить относительно большое значение, иначе вы увидите FFmpegвыходизбревноинформациясередина Нетостанавливатьсяизнапоминать:[video4linux2,v4l2 @ 0x25fbc40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8), захваченное видео также будет иметь необъяснимые ошибки, например, очень высокая частота кадров, его невозможно нормально воспроизвести, а видео не плавное. Пучок -thread_queue_size Установите для него относительно большое значение, пока подсказка не перестанет быть видимой.
(3). 推потоквидеодокумент到поток媒体服务器
видеодокументадрес:/Users/jack/test.mp4
Адрес потока push и pull: rtmp://localhost:1935/rtmplive/home
соотв.: аудиоформат RTMP
flv: RTMP-формат видео
ffmpeg -re -i /Users/jack/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home
(1) Отправьте файлы потокового видео на сервер RTSP.
ffmpeg -re -i /home/xx/Documents/in.mp4 -c copy -f rtsp rtsp://192.168.74.130:8554/room1
-re да Читать в ленте
-i Сразудавходитьиздокумент
-f Форматизменятьвыход Куда
-c copy Кодировщик без изменений
(2) Перенаправьте видеофайлы на сервер RTSP.
ffmpeg -re -stream_loop -1 -i aa.mp4 -c copy -f rtsp rtsp://192.168.80.49:8554/mystream
(3) Запишите экран компьютера и отправьте его на RTSP-сервер.
[1]
ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtsp rtsp://192.168.80.49:8554/mystream
[2]
ffmpeg -re -thread_queue_size 128 -threads 8 -f x11grab -video_size 1920x1080 -framerate 26 -i :0 -vcodec libx264 -preset ultrafast -tune zerolatency -muxdelay 2 -fast-pskip true -buffer_size 10240000 -qp 50 -crf 26 -level 3 -rtsp_transport udp -s 960x540 -max_muxing_queue_size 128 -f rtsp rtsp://ip:port/live/test
(4) Отправьте видео с камеры на RTSP-сервер.(windows)
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport udp -f rtsp rtsp://127.0.0.1/stream
В текущей статье мы впервые познакомимся с FFmpegНабор. инструментов、в MP4、MP3для例介绍звуквидеодокументиз Формат упаковки、формат кодирования,Наконец, перечислены несколько случаев обработки аудио и видео в командной строке ffmpeg.,Всем удобно быстро разобраться в распространённых методах ffmpeg. Но этим функции даffmpeg не ограничиваются.,Текущая статья посвящена только методу обработки командной строки ffmpeg.,еслинуждатьсясуществовать项глаз里引用ffmpeg完成一些特定项глазизразвивать。например:видеоигрок、звуквидео剪辑программное обеспечение,Программное обеспечение для производства спецэффектов,Также необходимо иметь глубокое понимание исходного кода ffmpeg.,Ознакомьтесь с функциями и методами вызова каждого API.