Базовые команды для FFmpeg

Базовые команды для FFmpeg

Ярослав Семёнов

Итак, после установки ffmpeg (инструкция для win, mac) можно творить магию в командной строке) Минимальным набором инструкций будет:


ffmpeg -i <source.mov> <final.mp4>

Эта команда сконвертирует source.mov в final.mp4 (mov и mp4 я указал для примера). Исходный файл может быть практически любого формата, ffmpeg понимает почти всё, что придумало человечество, кроме raw форматов.

-i <source.mov> - "-i" говорит ffmpeg-у, что сейчас будет исходный файл, вместо <source.mov> - должен быть полный путь до вашего файла (можно просто перетащить файл в окно терминала).

Обратите внимание! Скобочки <> ставить не надо! Команда должна выглядеть примерно так, только с вашими путями:

ffmpeg -i D:\Source\source.mov D:\Source\final.mp4

<final.mp4> - соответственно, полный путь до конечного файла. Можно опять же перетащить исходный файл, чтобы подставился нужный путь, и чутка его подредактировать.

По умолчанию при выборе финального контейнера mov или mp4 ffmpeg сконвертирует файл в кодек H.264, сохранив размер кадра, fps, и цветовую субдискретизацию.


Полезные команды 


1. Перепаковка

ffmpeg -i <source.mkv> -c copy <final.mov>

Одна из самых важных и полезных фишек ffmpeg - это возможность быстро перепаковать файл из одного контейнера в другой. Например, вам внезапно принесли фильм в формате mkv со словами «вот тут очень подходящий момент есть, надо его вставить». А монтажка ну ни в какую mkv импортировать не хочет, хотя внутри - тот же самый H.264. Поэтому можно просто перепаковать аудио и видео потоки в контейнер mov, который с лёгкостью импортируется в монтажку.


2. Перекодирование в монтажный кодек

ffmpeg -i <source.mp4> -c:v prores -c:a pcm_s16le <final.mov>

Эта команда конвертирует исходник в монтажный кодек ProRes с несжатым аудио. Файлы в монтажном кодеке гораздо меньше нагружают компьютер, и в целом повышают производительность при монтаже.


3. Обрезка

ffmpeg -i <source.mp4> -ss hh:mm:ss.mss -to hh:mm:ss.mss -c copy <cut.mp4>

-ss - точка входа, -to - точка выхода, формат времени часы:минуты:секунды:миллисекунды

В принципе, довольно простой синтаксис, но таки обрезать видео легче с графической оболочкой, да и формат времени используется не самый привычный, и недавно я наткнулся на прекрасную кроссплатформенную оболочку для этого: https://github.com/mifi/lossless-cut





Полезные параметры для кодирования


Следующие флаги можно вставить между <source.mov> и <final.mp4>


1) Качество картинки (для кодирования в H.264)

-crf 20

CRF - это довольно абстрактные цифра отвечает за качество изображения. То есть при кодировании в H.264 энкодер будет самостоятельно выбирать необходимый битрейт, чтобы поддерживать это выбранное качество. Изменяется в пределах от 0 до 51 (для 8-битных файлов). Чем ближе к 0 - тем будет выше качество и выше битрейт, чем ближе к 51, тем ниже битрейт и более шакалистый результат, по умолчанию этот параметр равен 23. При значениях 17-18 результат визуально практически неотличим от оригинала. Значение 35 хорошо подходит для прокси.


2) Совместимость (для кодирования в H.264)

-pix_fmt yuv420p

Этот фильтр полезен для совместимости. Если вы кодируете высококачественный материал в прокси, то по умолчанию ffmpeg постарается сохранить формат цветовой субдискретизации пикселей, но такой формат может быть не совместим с некоторыми плеерами или девайсами. Например QuickTime плеер не поддерживает в файлах H264 других форматов цветовой субдискретизации, кроме как 4:2:0 в цветовом пространстве YUV.


3) Деинтерлейсинг

-vf yadif

Хороший и относительно быстрый фильтр для деинтерлейсинга


4) Масштабирование картинки

-s 1280:720

Обратите внимание, что этот фильтр не сохраняет пропорции картинки, так что следите за этим самостоятельно. Естественно, цифры могут быть не только 1280 и 720)


-vf scale=1280:-1 

Можно воспользоваться этим фильтром, тут есть сохранение пропорций.

В обоих случаях учтите, что не все кодеки поддерживают нечётное количество пикселей по любой из сторон.


5) Поворот картинки

-c copy -metadata:s:v:0 rotate=90

Эта команда повернёт картинку без перекодировки, используя флаг в метадате.

-vf "transpose=2" 

Если вам надо повернуть картинку вместе с перекодировкой, то надо использовать этот фильтр. Цифру в конце можно поменять в зависимости от ваших нужд:

0 = 90 против часовой + отражение 
1 = 90 по часовой 
2 = 90 против часовой 
3 = 90 по часовой + отражение

Если вам необходимо повернуть картинку более, чем на 90 градусов, допишите еще один (или два) transpose через запятую:

-vf "transpose=2,transpose=2" 


6) Оптимизация для WEB

-movflags +faststart

Этот флаг перенесёт moov atom-ы (это такие описания аудио, видео, метадата потоков) в начало файла. Это позволит YouTube и другим видеосервисам начинать перекодировку еще во время заливки файла


7) Спрятать баннер

-hide_banner

Когда долго работаешь с FFmpeg, то текст, который каждый раз выводит ffmpeg в начале кодирования, начинает раздражать) Этой командой его можно скрыть.


Вступайте в наш чат: https://t.me/ru_montage


Report Page