FFmpeg от входа в клуб чтения мастер-Юньсян
FFmpeg от входа в клуб чтения мастер-Юньсян

Предисловие

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.

1. Инструмент обработки мультимедиа. Набор инструментов FFmpeg.

(1) Разработка FFmpeg

FFmpeg — мультимедийный проект с открытым исходным кодом, адрес проекта: https://github.com/FFmpeg/FFmpeg.

FFmpeg был впервые разработан талантливым французским программистом Фабрисом Беллой в 2000 году. С тех пор он быстро развивается. Последняя версия — 5.0.

В настоящее время FFmpeg используется во многих проектах с открытым исходным кодом, таких как ijkplayer, VLC, MPlayer, Blender, Google Chrome и т. д.

(2) Состав FFmpeg

Проект FFmpeg разделен на различные модули в зависимости от функций, включая AVFormat, AVCodec, AVFilter, AVDevice, AVUtil, swresample и swscale.

(3) Знакомство с модулем FFmpeg

【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:

Язык кода:javascript
копировать
(1), libavutilда Библиотека, содержащая упрощенные программные функции.,В том числе генератор случайных чисел,структура данных,математические процедуры,Основные мультимедийные утилитыждать。
(2), libavcodecда — это библиотека, содержащая декодеры и кодеры для аудио/видео кодеков.
(3), libavformat — Библиотека, содержащая демультиплексоры и мультиплексоры для форматов мультимедийных контейнеров.
(4), libavdeviceда Библиотека, содержащая устройства ввода и вывода для получения и рендеринга из многих распространенных программных платформ ввода-вывода мультимедиа (пакеты Video4Linux, Video4Linux2, VfWиALSA).
(5), libavfilter — библиотека, содержащая медиа-фильтры.
(6), libswscaleда Библиотека, которая выполняет высокооптимизированное масштабирование изображений и операции преобразования цветового пространства/формата пикселей.
(7), libswresampleда — это библиотека, которая выполняет высокооптимизированную передискретизацию звука, перематрицирование и операции преобразования формата семпла.

(4) Набор инструментов FFmpeg

【1】ffmpeg да FFmpeg Инструменты кодека в наборе инструментов.

【2】ffplay да FFmpeg Плеер в наборе инструментов.

【3】ffprobe да FFmpeg Инструменты мультимедиа-анализа в наборе инструментов.

(5) Компиляция и установка FFmpeg (Linux)

【1】Загрузить адрес

Язык кода:javascript
копировать
https://ffmpeg.org/download.html

【2】Настроить FFMPEG

Язык кода:javascript
копировать
[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

2. Формат инкапсуляции видеофайлов.

FFmpeg поддерживает множество форматов упаковки, включая форматы упаковки видео, такие как MP4, FLV, MKV и TS, форматы упаковки аудио, такие как MP3, AAC, а также форматы упаковки сетевых протоколов, такие как RTMP, RTSP и HLS. Далее мы сосредоточимся на формате упаковки видео MP4.

(1) Формат упаковки MP4

MP4 Формат По сути, упаковку можно считать наиболее распространенным форматом видеофайлов в повседневной жизни и работе, в основном да Зависит. отза его широкую применимость,Он не только очень хорошо поддерживается на стороне ПК (Windows, Mac, Linux).,И в нее также можно без проблем играть на мобильных терминалах (Android, iOS).

(2) Стандарт формата MP4

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 также известный как Контейнер.

(3)MP4 ftyp Box

Поле ftyp, обычно расположенное в начале файла, содержит тип, версию, совместимый протокол и другую информацию видеофайла MP4.

(4)Контейнер MP4 moov

moov Контейнер содержит MP4 видеодокументинформация о медиа-данных,Он содержит два подконтейнера: mvhdиtrak.,Первый определяет информацию заголовка документа.,Последнее определяет средства массовой информациидокументвtrackинформация。

Контейнер moov обычно создается в конце файла MP4 по умолчанию. Во время онлайн-воспроизведения необходимо загрузить весь файл, прежде чем его можно будет открыть в обычном режиме. Чтобы быстро открыть видео, необходимо поместить в него контейнер moov. перед файлом MP4.

(5)MP4 mdat Box

mdat Box, используемый для хранения фактического содержимого медиафайлов.

3. Формат кодирования видеофайлов

FFmpeg поддерживает множество форматов кодирования видео, таких как: MPEG4, H263, H264, H265, VP8, VP9 и т. д.

Далее сосредоточьтесь на формате кодирования видео H264.

(1) Управление скоростью кода H264

【1】VBR: переменный битрейт, режим динамического битрейта, битрейт которого может меняться в зависимости от сложности изображения. И меняется, поэтому эффективность его кодирования относительно высока.

【2】CBR:Constant BitRate, режим постоянной скорости передачи данных, Зависит от Так как скорость кода постоянна и происходят резкие изменения картинки, QP Параметры увеличатся, качество изображения ухудшится, а полоса пропускания будет потрачена впустую, когда сцена статична. Общее качество изображения для этого режима Нестабильный.

【3】ABR:Average BitRate, режим среднего битрейта, да VBR Производная форма файла, указанного в В пределах размера статические или почти статичные части изображения используют относительно низкий трафик, а сложные части изображения используют более высокий трафик. Поток можно рассматривать как да VBR и CBR компромисс.

(2) Тип I-образной рамы H264.

【1】Первое изображение последовательности GOP называется IDR изображение (немедленно обновить изображение), IDR Изображения все да I изображение в рамке,Но I-кадры не обязательно являются всеми кадрами даIDR.,Только первый I-кадр даIDR-кадр последовательности GOP.

[2] I-кадр, также называемый внутрикадровым опорным кадром, сохраняет полную картину.

【3】Полное изображение можно восстановить, используя только данные I-кадра во время декодирования.

【4】I-кадры генерируются без ссылки на другие изображения.

【5】Опорный кадр I-кадра, P-кадра и B-кадра.

[6] В I-кадрах нет необходимости учитывать векторы движения.

[7] I-кадр занимает наибольший объем данных.

(3) Тип рамы B H264

【1】Кадр B,Также называется двунаправленной системой отсчета.,То есть разница между текущим кадром и предыдущим и последующим кадрами, записанными в кадре даB,Для декодирования B-кадров,Нет Ему нужно не только получить предыдущее кэшированное изображение, но и декодировать последующее изображение, наложив предыдущее и следующее изображения на данные этого кадра. Получите финальную картинку.

【2】Кадр B имеет самую высокую степень сжатия.,нода При декодированииCPUиспользовать Ставка будет выше。

【3】Кадр B да Зависит от предыдущего кадра I или P и следующего кадра P для прогнозирования.

【4】Ошибка прогнозирования и вектор движения между кадром B и предыдущим кадром I или P и следующим кадром P.

【5】Кадр B не имеет опорного кадра и не вызывает распространения ошибок декодирования.

(4) Тип рамки P H264

【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-кадром.

(5) Отношение ссылок на кадры H264

4. Формат инкапсуляции и формат кодирования аудиофайлов.

(1) Формат аудиоинкапсуляции FFmpeg

MP3 да Один из наиболее распространенных аудиоформатов, которые мы используем в повседневной жизни, также даан аудиоформат упаковки。

В повседневной жизни мы часто можем видеть аудиофайлы *.mp3, точно так же, как форматы упаковки видео mp4 и flv.

Формат упаковки MP3

Используйте следующую команду для просмотра ffmpeg Список поддерживаемых форматов упаковки: ffmpeg -formats | grep mp3

Используйте следующую команду для воспроизведения музыкального файла mp3:

Обычный режим: ffplay Подросток.mp3

Режим графика формы сигнала:ffplay -showmode 1 Подросток.mp3

Режим спектрограммы:ffplay -showmode 2 Подросток.mp3

(2) Формат кодирования звука FFmpeg

FFmpeg поддерживает множество форматов кодирования, включая MP3, AAC, AC3 и т. д.

Далее мы сосредоточимся на формате кодирования звука MP3.

Формат кодирования MP3

MP3 Также есть аудиоформат кодирования。

и видео другое, формат видео кодирования,например H264, обычно инкапсулированный MP4 или FLV Такой формат Используется в производстве. Формат кодирования аудио MP3, затем да инкапсулируется в одно и то же имя. MP3 в формате упаковки. Их легко спутать, поэтому будьте осторожны, чтобы различать их.

Формат кодирования MP3

Используйте следующую команду для просмотраffmpegподдерживаетсяформат кодированиясписок:

Структура файла MP3

Структура файла MP3

5. Распространенные методы просмотра медиаинформации и обработки аудио и видео файлов с помощью FFmpeg

(1) Инженерное решение FFmpeg

Аудиодокументивидеодокумент Процесс транскодирования обычно называетсямультимедийная обработка,Облако У Huawei также есть соответствующая Обработка. медиа Сервис—— Медиа Processing Центр, аббревиатура MPC, сервис обработки мультимедийных данных, основанный на Облако Создание службы облачных вычислений Huawei для решения проблем, возникающих у клиентов самостоятельно. видеоспособность Нет Можетизбегатьиз Высокая инвестиционная стоимость、Высокий технический порогждатьвопрос,Помогите клиентам специализироваться на построении бизнес-возможностей,Быстрая доставка онлайн.

【1】Обработка видео

【2】Обработка звука

(2) Транскодирование видео FFmpeg

использовать FFmpeg вернозвукобработка видео,Главное перекодирование, Параметры видео、Параметры звука разделены на три части.

Принцип работы традиционной программы транскодирования показан на рисунке ниже:

【1】Пример перекодирования аудио и видео:

Язык кода:javascript
копировать
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】Самый простой способ перекодирования

Язык кода:javascript
копировать
ffmpeg -i 123.mp4 out.flv

【3】Конвертируйте любой формат в MP4.

Язык кода:javascript
копировать
Перекодируйте формат видео и установите частоту дискретизации звука и размер выходного видео: 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

(3) Объединение аудио и видео

【1】Сращивание видео

Этот метод должен гарантировать, что все видео имеют одинаковый формат и битрейт звука, иначе их невозможно будет нормально объединить.

Язык кода:javascript
копировать
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】Объедините исходные видео с разным разрешением в одно видео и установите центральное положение экрана.

Язык кода:javascript
копировать
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】Синтез микширования звука

Язык кода:javascript
копировать
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】Синтез аудиосоединения

Язык кода:javascript
копировать
ffmpeg -i "concat:headerNew.mp3|006.mp3" -acodec copy demo6.mp3
    
Описание параметра:
concat слитьдокументинструкция;

【5】Эффект затухания звука

Язык кода:javascript
копировать
ffmpeg -i bgm3.mp3  -filter_complex afade=t=out:st=16:d=4 bgm31.mp3

Описание параметра:
afade Инструкции по исчезновению;
от st Секунды начинаются и проходят d Второйэффект исчезновения часов;

【6】Используйте конкат-фильтр FFmpeg для перекодирования (с потерями)

Синтаксис немного сложен,Но да на самом деле это не сложно. Этот метод позволяет объединять видеоклипы из разных кодеров.,ХОРОШОВ качестве резервной меры, если другие методы не сработают.。

Язык кода:javascript
копировать
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】Используйте микс, чтобы объединить два звука.

Язык кода:javascript
копировать
ffmpeg -i g001_2.wav -i tx.wav -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 tx_new.wav

(4) Воспроизведение видео

Язык кода:javascript
копировать
//Видео воспроизводится задом наперед, без звука
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

(5) Конвертируйте видео в GIF

Язык кода:javascript
копировать
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。

Вышеуказанные параметры и фильтры можно настроить в соответствии с вашими потребностями. от Выбор и настройки.

(6) Добавьте водяной знак изображения к видео.

【1】Добавить водяной знак изображения

Язык кода:javascript
копировать
//Добавляем водяной знак изображения
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 в левом нижнем углу видео.

Язык кода:javascript
копировать
ffmpeg -y -i test2.mp4 -i gnore_loop 0 -i test.gif  -filter_complex overlay=0:H-h test_out2.mp4

【3】Изменение времени отображения водяных знаков

Язык кода:javascript
копировать
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】Изменение положения водяного знака

Язык кода:javascript
копировать
Установите водяной знак, чтобы он со временем перемещался вправо.
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

Язык кода:javascript
копировать
Первый: установите для 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】Поворот водяного знака

Язык кода:javascript
копировать
если Хотите реализовать функцию вращения,нуждатьсяиспользовать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,В обычных условиях изображение водяного знака по умолчанию останавливается после однократного воспроизведения.,сохранить последний кадр,Поэтому изображение водяного знака необходимо хранить в цикле.

(7) Используйте ffprobe для получения медиаинформации.

【1】Информация о носителе вывода

Язык кода:javascript
копировать
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】Информация о носителе вывода

Язык кода:javascript
копировать
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"
            }
        }
    ]
}

(8) Соберите экран рабочего стола и камеру и сохраните как видео.

【1】 Список аудиоустройств и камер, установленных в данный момент на компьютере.

Язык кода:javascript
копировать
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -list_devices true -f dshow -i dummy

【2】Запись полноэкранного изображения рабочего стола + звука

Язык кода:javascript
копировать
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】Запись камеры + аудио

Язык кода:javascript
копировать
Пример 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】 Захват назначенной области рабочего стола (без звука)

Язык кода:javascript
копировать
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】Соберите выделенную область рабочего стола + аудио

Язык кода:javascript
копировать
//Запись указанного диапазона — собираем изображение + аудио
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】Дело

Язык кода:javascript
копировать
Составьте список устройств
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"

(9) Замена видео и аудио

【1】Удалить исходный звук видео и добавить новый звук.

Язык кода:javascript
копировать
(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】Сохраните видео в исходном виде и добавьте новый звук.

Язык кода:javascript
копировать
ffmpeg -i Цветочница-Xiner.mp3 -i 123.mp4 -filter_complex amix=inputs=2 output.mp4

【3】Заменить звук исходного видео.

Язык кода:javascript
копировать
ffmpeg -i tx_new.wav -i r001_2.flv -shortest -c copy n001_2.flv

(10) Добавить текстовый водяной знак к видео

【1】Добавьте водяной знак в верхнем левом углу изображения (абсцисса 10, ордината 100):

Язык кода:javascript
копировать
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】Общие случаи

Язык кода:javascript
копировать
Положение водяного знака: (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

(11) Резка видео

【1】Случай 1

Язык кода:javascript
копировать
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

Язык кода:javascript
копировать
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.ts
-i : Укажите видео
-ss : время начала
-t : Указанная обрезка Второйчисло

【3】Случай 3

Язык кода:javascript
копировать
ffmpeg -i organ.mp3 -ss 00:00:xx -t 120 output.mp3

Описание параметра:
-i документ,orgin.mp3 Для исходного документа, подлежащего обработке;
-ss Время обрезки,Вырез пяткивремя начала,а также -t сокращение времени;
output.mp3 для обработки результатовдокумент;

(12) Получите продолжительность видео формата FLV.

Видео в формате FLV не может быть получено напрямую через вывод json с помощью ffprobe, как и другие видео. Время можно получить, перехватив период времени и преобразуя его через вывод командной строки.

Язык кода:javascript
копировать
    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"));
    }

Результат вывода:

Язык кода:javascript
копировать
Продолжительность видео (стандартное время): 00:06:37.15
Максимальная длина видео (мс): 397150
Продолжительность восстановленного видео (стандартное время): "00:06:37.150"

(13)В видео реализованы различные спецэффекты.

Язык кода:javascript
копировать
//Появление
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

(14) Преобразование в ключевой кадр (для достижения точной резки)

Ежедневный монтаж видео,После обрезки видео могут быть некоторые эффекты,Как и ожидалось,Начало с 00 секунд,Завершится через 30 секунд,Всего 30 секунд видео,Но обрезав некоторые видео, вы обнаружите, что начало и конец могут быть не очень точными.,возможныйдаот Начало с 00 секунд,33Второй закончился. Почему это? Потому что в этих видео нет ключевого кадра длиной 30 секунд, и ffmpeg подстроится к ближайшему ключевому кадру рядом с введенным вами моментом времени, а затем сделает следующее. Если вы не понимаете ключевые кадры, не беда, это не повлияет на использование этой команды. Если требования вашего проекта допускают ошибку в несколько секунд, то эта команда может полностью удовлетворить ваши потребности, и нет необходимости читать следующий контент. Если требования в вашем проекте очень строгие, вы должны прибыть в определенное время. Тогда нам придется использовать другой метод. Вышеизложенное приводит к тому, чтодавыбраноизчасмежду Нетдаключевой кадр,Чтоеслинас Воля Входное видео Сначала конвертировать во всеизрамкиключевой кадризвидео,На самом деле простода Воля Все кадры кодируются ввнутрикадровое кодирование

Язык кода:javascript
копировать
ffmpeg -i r001.flv -strict -2 -qscale 0 -intra r002.flv 
# Преобразование ключевых кадров внутрикадровое кодирование

Вырезать первые 6 секунд видео

Язык кода:javascript
копировать
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 обозначениевходитьдокумент

(15) Извлечение аудиофайлов из видео

Язык кода:javascript
копировать
# отr002.mp4видеоизвлечено из Аудио,документ Имяr002.wav,Формат: wav.
ffmpeg -i g001_2.flv -vn -acodec копия g001_2.wav

(16)Регулировка громкости звука

Этот параметр команды для изменения громкости,существоватьсинтез Аудионазад,Возможно, это потому, что оригинальное видео очень громкое.,Но звук спецэффектов невелик,заставляя его звучать громче и тише,В этом случае вы можете регулировать громкость равномерно.

Язык кода:javascript
копировать
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

(17) Добавляйте файлы субтитров ASS к видео.

Язык кода:javascript
копировать
ffmpeg -i 001.mp4 -vf ass=demo.ass -b:v 3000K r001.flv

(18) Добавьте анимацию к видео.

【1】Добавьте анимацию на 6-й секунде видео.

Язык кода:javascript
копировать
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.

(19) Добавить эффект выделения к видео (прокручивающиеся субтитры)

【1】Прокрутка слева направо.

Язык кода:javascript
копировать
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】Прокрутка справа налево.

Язык кода:javascript
копировать
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 секунд.

Язык кода:javascript
копировать
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

(20) FFMPEG использует графический процессор для ускорения транскодирования при обработке видео.

【1】Различия между программным и аппаратным кодированием

Транскодирование видеочасесливстретитьсявидеоотносительно большой、часочень длинныйизчасждать,Транскодирование и подавление занимают много времени и нагружают процессор.,Поэтому мне было интересно, есть ли способ ускорить процесс перекодирования., поэтому в этой статье описывается, как FFMPEG вызывает видеокарту для преобразования формата. кодирование подавили для ускорения.

Разница между мягкими и жесткими кодеками: Мягкое кодирование: использование процессора для кодирования жестко закодированный:использовать НетCPUКодировать,Например, видеокартаGPU、Выделенный DSP、FPGA、Ожидание чипа ASIC

Разница между мягкими и жесткими кодеками: Мягкое кодирование: прямое и простое в реализации, легко настраиваемые параметры и легкое обновление, но загрузка ЦП большая, а производительность ниже, чем при жестком кодировании. Качество при низких скоростях передачи данных обычно лучше, чем при жестком кодировании. жестко закодированный:Высокая производительность,Низкий битрейт обычно имеет более низкое качество, чем мягкие кодеры.,Однако некоторые продукты перенесли отличные алгоритмы мягкого кодирования (например, X264) на аппаратную платформу графического процессора.,Качество в основном такое же, как и у мягкого кодирования.

【2】Проверьте поддерживаемые методы аппаратного ускорения.

Язык кода:javascript
копировать
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】Команда аппаратного ускорения

Язык кода:javascript
копировать
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 для декодирования.

Язык кода:javascript
копировать
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

Язык кода:javascript
копировать
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】Дело

Язык кода:javascript
копировать
Вырезать видеоклипы
если Входное видео Формативыходизвидео Форматтакой же. Можетпрямойиспользовать -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"

(21) ffmpeg получает скриншоты видео

Очень удобно использовать ffmpeg для создания скриншотов видео, ffmpeg Указав -vcodec Параметры mjpeg, или укажите -f Параметры mjpeg, вы можете вывести Скриншот в формате jpg, указан -vcodecПараметрыpng,или Укажите расширение выходного документа как png,Можетвыходpngскриншот。еслипараметробозначение Неткогда,Приведёт к очень медленной обработке ffmpeg.

Язык кода:javascript
копировать
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

(22) Размер видео остается неизменным и масштабируется пропорционально (нарисуйте черные рамки)

Язык кода:javascript
копировать
Заказ Пример:
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
разрешение、Частота кадров、Частота дискретизации звука непостоянна, и видео невозможно правильно объединить.

(23) Передача между видео и изображениями

Язык кода:javascript
копировать
Конвертировать видео в картинку:
# ffmpeg -i 123.mp4 image_%d.jpg
Воля 123.mp4 Каждый кадр видео сохраняется в виде изображения.
Преобразование изображения в видео:
# ffmpeg -f image2 -i image_%d.jpg video.mpg

(24) ffmpeg отправляет поток на rtmp-сервер

Язык кода:javascript
копировать
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

(25) ffmpeg отправляет поток на rtsp-сервер

(1) Отправьте файлы потокового видео на сервер RTSP.

Язык кода:javascript
копировать
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.

Язык кода:javascript
копировать
ffmpeg -re -stream_loop -1 -i aa.mp4 -c copy -f rtsp rtsp://192.168.80.49:8554/mystream

(3) Запишите экран компьютера и отправьте его на RTSP-сервер.

Язык кода:javascript
копировать
[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)

Язык кода:javascript
копировать
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

6. Резюме

В текущей статье мы впервые познакомимся с FFmpegНабор. инструментов、в MP4、MP3для例介绍звуквидеодокументиз Формат упаковки、формат кодирования,Наконец, перечислены несколько случаев обработки аудио и видео в командной строке ffmpeg.,Всем удобно быстро разобраться в распространённых методах ffmpeg. Но этим функции даffmpeg не ограничиваются.,Текущая статья посвящена только методу обработки командной строки ffmpeg.,еслинуждатьсясуществовать项глаз里引用ffmpeg完成一些特定项глазизразвивать。например:видеоигрок、звуквидео剪辑программное обеспечение,Программное обеспечение для производства спецэффектов,Также необходимо иметь глубокое понимание исходного кода ffmpeg.,Ознакомьтесь с функциями и методами вызова каждого API.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose