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" --------------------------------------------- Изменение скорости воспроизведения. Скорость воспроизведения видео и аудио изменяется раздельно. Чтобы увеличить или уменьшить скорость видео, используется видеофильтр «setpts» -- удвоит скорость видео: --------------------------------------------------- ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4 --------------------------------------------------- Чтобы замедлить видео, нужно использовать множитель больше 1. -- замедлит исходное видео в 4 раза: --------------------------------------------------- ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4 --------------------------------------------------- Чтобы одновременно удвоить скорость воспроизведения для видео и аудио придется скомбинировать оба фильтра. -------------------------------------------------------------------- ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp3 -------------------------------------------------------------------- -- обратное видео ------------------------------------------ ffmpeg -i vid.mp4 -vf reverse reversed.mp4 ------------------------------------------ -- сделать версию в оттенках серого и масштабировать до 640x480 ---------------------------------------------------------------------------------- ffmpeg -i video.mov -vf eq=saturation=0 -s 640x480 -c:v libx264 -crf 24 output.mp4 ---------------------------------------------------------------------------------- -- добавить водяной знак (png) в центр видео ------------------------------------------------------------------------------------------------------------------------ ffmpeg -i source.mov -i watermark.png -filter_complex "overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2" output.mp4 ------------------------------------------------------------------------------------------------------------------------ -- сконфигурируйте видео с перевернутой копией самого себя для эффекта зацикливания пинг-понга ------------------------------------------------------------------------------------------------------------ ffmpeg -i input.mp4 -filter_complex "[0:v]reverse,fifo[r];[0:v][r] concat=n=2:v=1 [v]" -map "[v]" output.mp4 ------------------------------------------------------------------------------------------------------------ jpg === -- Разобрать видео на изображения ------------------------------- ffmpeg -i video.flv image%d.jpg ------------------------------- -- преобразование изображений в видео --------------------------------------------------------------------------------- ffmpeg -f image2 -i image%d.jpg imagestovideo.mp4 ffmpeg -i image-%03d.png -c:v libx264 -pix_fmt yuv420p test.mp4 ffmpeg -r 1/5 -i image-%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p test.mp4 --------------------------------------------------------------------------------- -- преобразование одного изображения в видео ------------------------------------------------------------------------------------------- ffmpeg -loop 1 -i image.png -c:v libx264 -t 60 -pix_fmt yuv420p -vf scale=1920:1080 out.mp4 ------------------------------------------------------------------------------------------- -- преобразование изображений с непоследовательными именами в каталоге ------------------------------------------------------------------------------------------- ffmpeg -framerate 30 -pattern_type glob -i '*.jpeg' -c:v libx264 -pix_fmt yuv420p gan-1.mov ------------------------------------------------------------------------------------------- -- преобразование последовательности изображений разных размеров в соответствии с конкретным размером кадра --------------------------------------------------------------------------------------------------------------------------- ffmpeg -i image-%04d.jpg -c:v libx264 -pix_fmt yuv420p -vf "scale=max(1280\,a*720):max(1280\,720/a),crop=1280:720" test.mp4 --------------------------------------------------------------------------------------------------------------------------- -- гарантия соотношения сторон изображения ---------------------------------------------------------------------------------- ffmpeg -i image-%04d.jpg -c:v libx264 -pix_fmt yuv420p -vf "scale=720:-2" test.mp4 ---------------------------------------------------------------------------------- Запись/Захват ============= -- запись подкаста -------------------------------------------------------------------- ffmpeg -hide_banner -f avfoundation -list_devices true -i «» ffmpeg -f avfoundation -ac 2 -i :1 -c:a aac -ab 96k test.aac ffmpeg -f avfoundation -ac 1 -i :1 -c:a pcm_s16le -ar 22050 test.wav #ffmpeg -f pulse -i 2 -ac 2 -acodec libmp3lame -ab 320k out.mp3 ------------------------------------------------------------------- -- запись скринкаста Скринкастинг (программная кодировка) с динамическим размером экрана ------------------------------------------------------------------- `ffmpeg -y -f x11grab -s `xdpyinfo | grep 'dimensions:'| awk '{print $2}'` -i :0.0 -f pulse -i default -c:v libx264 -r 48 -c:a flac out.mkv` ------------------------------------------------------------------- -- скринкастинг (жесткое кодирование) с указанным размером экрана ----------------------------------------------------------------- ffmpeg -f alsa -i default -c:a flac \ -vaapi_device /dev/dri/renderD128 -y -f x11grab -s 1920x1080 -i :0.0+1366,0 \ -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -preset ultrafast -crf 0 \ -tune film -r 60 out.mkv --------------------------------------------------------------