Базовые команды для 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