ffmpeg
======
Установка через macports port
sudo port install ffmpeg
-- проиграть файл
ffplay
-- проиграть без графического дисплея
ffplay -nodisp
fprobe — консольная утилита, позволяющая собирать и отображать информацию о медиафайлах (как MediaInfo) и мультимедиапотоках, доступных устройствах, кодеках, форматах, протоколах и др
Аудио в разные форматы / частота дискретизации / порезать
=========================================================
-- изменение громкости:
Следующая команда в половину уменьшит громкость
-----------------------------------------------
ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3
-----------------------------------------------
-- увеличить (в полтора раза)
---------------------------------------------------------
ffmpeg -i input.mp4 -c:v copy -af 'volume=1.5' output.mp4
---------------------------------------------------------
Чтобы увеличить или уменьшить скорость аудио, используется аудиофильтр «atempo»
-- удвоит скорость звука:
---------------------------------------------------
ffmpeg -i input.mp4 -af "atempo=2.0" -vn output.mp4
---------------------------------------------------
Допустимы значения от 0.5 до 2.0
-- Перекодировать из MP3 в WMA:
------------------------------
ffmpeg -i input.mp3 output.wma
------------------------------
-- Преобразуйте WAV в MP3, свести в моно, установвить скорость передачи данных 64 кбит / с и частоту дискретизации 22050 Гц:
---------------------------------------------------------
ffmpeg -i input.wav -ac 1 -ab 64000 -ar 22050 output.mp3
---------------------------------------------------------
-- Вырезать 30 секунд начиная с 60 секунд и перекодировать:
--------------------------------------------
ffmpeg -i input.mp3 -ss 60 -t 30 output.wav
--------------------------------------------
-- Вырезать кусок HH:MM:SS перекодировать:
-----------------------------------------------------
ffmpeg -i input.mp3 -ss 0:01:00 -t 0:00:30 output.wav
-----------------------------------------------------
-- Разделить с указанной продолжительностью сегмента (например, 3 секунды):
---------------------------------------------------------------------
ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3
---------------------------------------------------------------------
-- Извлечь аудио
-----------------------------------------------------------
ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
-----------------------------------------------------------
copy acodec говорит, что использовать тот же аудиопоток, который уже там, -vn нет видео
---------------------------------------------------
ffmpeg -i video.mp4 -f mp3 -ab 192000 -vn music.mp3
---------------------------------------------------
Опция -i в приведенной выше команде проста: это путь к входному файлу.
Вторая опция -f mp3 сообщает ffmpeg, что вывод находится в формате mp3.
Третий вариант, то есть -ab 192000, сообщает ffmpeg, что мы хотим, чтобы вывод был закодирован со скоростью 192 Кбит / с, а -vn сообщает ffmpeg, что нам не нужно видео.
-- Заменить звук на видео без перекодирования
предпочтительный метод
----------------------------------------------------------------------------------
ffmpeg -i INPUT.mp4 -i AUDIO.wav -shortest -c:v copy -c:a aac -b:a 256k OUTPUT.mp4
----------------------------------------------------------------------------------
-- отделить аудиопоток от видео
----------------------------------------------
ffmpeg -i INPUT.mp4 -codec copy -an OUTPUT.mp4
----------------------------------------------
-- объединить два потока вместе (новый звук со звуком в видео)
----------------------------------------------------------------------
ffmpeg -i 36.MOV -i 36.wav -map 0:v -map 1:a -c copy -y 36-encoded.mov
----------------------------------------------------------------------
-- добавьте смещение к аудио
---------------------------------------------------------------------------------------
ffmpeg -i 36.MOV -itsoffset -0.25 -i 36.wav -map 0:v -map 1:a -c copy -y 36-encoded.mov
---------------------------------------------------------------------------------------
-- хотите «извлечь аудио (mp3 или ogg)». Но что, если звук в файле не mp4? Вам все равно придется перекодировать. Так почему бы не оставить определение аудиоформатов ffmpeg?
-----------------------------------------------------------
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
-----------------------------------------------------------
-- только извлечь звук, вы можете просто «скопировать» звуковую дорожку в файл с помощью -acodec copy. Основное отличие состоит в том, что перекодирование выполняется медленно и требует много ресурсов процессора, в то время как копирование происходит очень быстро, поскольку вы просто перемещаете байты из одного файла в другой.
------------------------------------------------------
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
------------------------------------------------------
-- преобразование m4a в mp3 с ffmpeg и lame
----------------------------------------------------------
ffmpeg -i input.m4a -acodec libmp3lame -ab 128k output.mp3
----------------------------------------------------------
-- Микшировать стерео в моно
Левый канал в моно:
---------------------------------------------------------
ffmpeg -i video.mp4 -map_channel 0.1.0 -c:v copy mono.mp4
---------------------------------------------------------
Левый канал в стерео:
------------------------------------------------------------------------------
ffmpeg -i video.mp4 -map_channel 0.1.0 -map_channel 0.1.0 -c:v copy stereo.mp4
------------------------------------------------------------------------------
Если вы хотите использовать правый канал, напишите «0.1.1» вместо «0.1.0».
-------------------------------------------------
ffmpeg -i video.mp4 -af "pan=mono|c0=FL" mono.mp4
-------------------------------------------------
Чтобы включить правый канал в качестве моноканала, замените FL с FR.
Видео
=====
-- отрезать 30 секунд от начала видео
---------------------------------------------------------
ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3
---------------------------------------------------------
-- вырезать видео mp4 без перекодирования
-------------------------------------------------------------------
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -c copy cut_video.mp4
-------------------------------------------------------------------
-- вырезать mp4 видео с перекодированием
-------------------------------------------------------------------------------
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -async 1 -strict -2 cut_video.mp4
-------------------------------------------------------------------------------
Если вы хотите отрезать секцию с самого начала, просто опустите -t 00:00:10 из команды
-- объединить несколько
с помощью списка
cat > mylist.txt
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
---------------------------------------------------------
используется оператор concat. После двоеточия ему передаются входные файлы,разделённые вертикальной чертой.
---------------------------------------------------------------------------
ffmpeg -i "concat:file1.avi|file2.avi" -vcodec copy -acodec copy output.avi
---------------------------------------------------------------------------
Соединяемые файлы обязательно должны быть одного формата (видео и аудио), их параметры должны совпадать. Если это не так, то предварительно нужно произвести перекодирование файлов к единому формату. Файлы mp4 нельзя объединить напрямую с помощью concat, но можно предварительно преобразовать, например, MPEG-TS без перекодирования видео и звука.
-----------------------------------------------------------------------------------------
ffmpeg -i video1.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts video1.ts
ffmpeg -i video2.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts video2.ts
-----------------------------------------------------------------------------------------
затем объединить в итоговый файл mp4
ffmpeg -i "concat:output.ts|output2.ts" -vf "scale=420:-2" hto_eto.mp4
ffmpeg -i "concat:video1.ts|video2.ts" -vcodec copy -acodec copy out.mp4
-- объединить все файлы в папке, чтобы сделать один файл с помощью FFMPEG
-------------------------------------------------------------------------------------------------------------------
find *.mp4 | sed 's:\ :\\\ :g'| sed 's/^/file /' > fl.txt; ffmpeg -f concat -i fl.txt -c copy output.mp4; rm fl.txt
-------------------------------------------------------------------------------------------------------------------
-- повернуть видео путем редактирования метаданных (без перекодирования)
------------------------------------------------------------------------------------
ffmpeg -i input.m4v -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.m4v
------------------------------------------------------------------------------------
-- конвертирование для твиттера
---------------------------------------------------------------------------------
ffmpeg -i input.mp4 -vf "scale=720:1280" -c:v libx264 -c:a aac -crf 17 output.mp4
---------------------------------------------------------------------------------
-- конвертирование для odysee.com
--------------------------------------------
ffmpeg -i input.avi -c:v libx264 -crf 21 -preset faster -pix_fmt yuv420p -maxrate 5000K -bufsize 5000K -vf 'scale=if(gte(iw\,ih)\,min(1920\,iw)\,-2):if(lt(iw\,ih)\,min(1920\,ih)\,-2)' -movflags +faststart -c:a aac -b:a 160k output.mp4
-- уменьшить размер файла
Это уменьшило размер видео со 100 МБ до 9 МБ .. Очень небольшое изменение качества видео.
------------------------------------------------------
ffmpeg -i input.mov -vcodec libx264 -crf 24 output.mp4
------------------------------------------------------
-- convert MP4 to WEBM
---------------------------------------------------------------
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 31 -b:v 1M output.webm
---------------------------------------------------------------
-- MKV в MP4
------------------
ffmpeg -i file.mkv
------------------
Проверьте наличие потоков, которые вам нужны (видео / аудио). Обязательно преобразовать / указать 6-канальный аудиопоток DTS
-----------------------------------------------------------------------------------------------------------------
ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -c:v copy -c:a:1 libmp3lame -b:a 192k -ac 6 output.mp4
-----------------------------------------------------------------------------------------------------------------
-- convert .mov (JPEG-A или другой кодек) в H264 .mp4
---------------------------------------------------------------
ffmpeg -i input.mov -vcodec libx264 -pix_fmt yuv420p output.mp4
---------------------------------------------------------------
-- перепаковать файл из одного контейнера в другой без пересжатия и потери качества
--------------------------------------------------------
ffmpeg -i input.mkv -vcodec copy -acodec copy output.mov
--------------------------------------------------------
сокращенная запись
--------------------------------------
ffmpeg -i input.mkv -c copy output.mov
--------------------------------------
-- коэффициент качества
------------------------------------------------
ffmpeg -i input.mp4 -b:v 1M -b:a 192k output.avi
------------------------------------------------
вместо битрейта можно указать опцию -crf (коэффициент качества).
---------------------------------------------------------------------------
ffmpeg -i input.avi -c:v libx264 -preset medium -c:a aac -crf 15 output.mp4
---------------------------------------------------------------------------
Изменяется в пределах от 0 до 51. Чем ниже значение -crf, тем выше качество будет у выходного файла, однако, как и в случае с высоким битрейтом, увеличится его размер. При значениях 14-17 результат визуально почти неотличим от оригинала. Значение -crf
равное 0, будет означать кодирование без потери качества.
У каждого кодека могут быть свои специфические параметры. Например, у H.264 и H.265 часто используется опция -preset влияющая на соотношение скорость кодирования/качество.
Значения -preset могут быть: ultrafast, superfast, veryfast, faster, fast, medium (по умолчанию), slow, slower, veryslow. Для чернового варианта можно использовать «быстрые настройки» из категории fast, а для продакшена рекомендуется не ниже slow.
для VP9 кодирование без потери качества задается опцией -lossless 1
----------------------------------------------------
ffmpeg -i input.mp4 -c:v vp9 -lossless 1 output.webm
----------------------------------------------------
используйте магическое число -1 для пропорционального изменения размера видео
---------------------------------------------
ffmpeg -i -vf "scale=100:-1"