Конвертируем видео в формат .h264
До недавнего времени .h264 считался стандартом де-факто для видео в WEB (и сейчас считается, так как форматы конкуренты VP8 и VP9 не достигли еще такой популярности), а типовая команда осуществляющая такую конвертацию из видео файла в любом формате (который сможет прочитать ваш FFmpeg) выглядит следующим образом:
$ ffmpeg -i <input-file-any-format>.mov -vcodec h264 -acodec aac -strict -2 <output-video-file>.mp4
Параметры vcodec и acodec задают выходной аудио и видео кодеки, а формат файла источника определяется автоматически.
Конвертируем видео в форматы VP8 и VP9
Форматы VP8 и VP9 сейчас активно продвигаются и вы можете с легкостью конвертировать любые ваши видеофайлы в эти форматы. После того, как я приведу примеры команд, которые я применяю для конвертации видео (аналогично .h264),мы попробуем преобразовать в форматы VP8 и VP9 большой OpenSource мультфильм Big Buck Bunny (кстати, мультик смешной, рекомендую посмотреть).
Для конвертации в формат VP8, я рекомендую использовать команду (я пробовал разные варианты, но этот самый нормальный):
# ffmpeg -i <input-file-any-format>.mov -vcodec libvpx -qmin 0 -qmax 50 -crf 10 -b:v 1M -acodec libvorbis <output-video-file>.webm
Параметры -crf 10 и -b:v 1M задают "качество видео" после преобразования, где -b это битрейт результирующего файла, а -crf "показатель качества" и чем он меньше тем лучше.
Для конвертации в формат VP9, используйте другую команду:
# ffmpeg -i <input-file-any-format>.mov -vcodec libvpx-vp9 -b:v 1M -acodec libvorbis <output-video-file>.webm
У VP9 гораздо больше параметров с которыми можно поиграть, для того чтобы подогнать видео к требуемому битрейту и размеру файла в ущерб качеству, но разного рода тюнинг качества и т.п. я в этой статье рассматривать не буду, это займет очень много времени и по этой теме если глубоко копать, то лучше документацию почитать, а мы рассматриваем только "быстрые рецепты" для того чтобы скопировать и вставить.
Перекодирование Big Buck Bunny в формате 4K из формата H264 в формат VP8 заняло около пяти часов (266 минут) (перекодирование производилось на процессоре Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz), а перекодирование того же мультфильма в формат VP9 заняло заняло шесть с половиной часов (383 минуты).
При этом объемы файлов составляли:
- 300 мегабайт пережатый кодеком VP8
- 106 мегабайт в случае с VP9
Нормализация видео (перекодирование с высоким уровнем сжатия)
Иногда при записи Let's play видео требуется снизить нагрузку на процессор и для этого мы можем настроить запись видео таким образом, что в результате мы получим файл огромного размера (с минимальной обработкой сжатия на лету) и для приведения такого файла в порядок его требуется нормализовать.
Для нормализации видео-файлов можно использовать команду:
$ ffmpeg -i ./<input-file>.mkv -preset slower -vcodec h264 -acodec aac ./<output-file>.mp4
Небольшой пример нормализации нескольких видео-файлов проекта Let's play-записи с низким уровнем сжатия:
103M ./TestPlayStation3-1.mkv 31M ./TestPlayStation3-1.mp4 1,1G ./TestPlayStation3-2.mkv 106M ./TestPlayStation3-2.mp4 1,6G ./TestPlayStation3-3.mkv 182M ./TestPlayStation3-3.mp4
Получение сведений о файле (кодек и т.п.)
Если у вас возникли вопросы по формату имеющегося видео-файл, то вы можете воспользоваться командой:
$ ffmpeg -i ./<any-supported-file>.mp4 -hide_banner
Обратите внимание на параметр -hide_banner, он подавляет вывод информации о версии FFMPEG и прочую сборочную техническую информацию. В результате выполнения этой команды вы получите достаточно много информации о имеющемся у вас файле:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './VID_20180309_111755.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2018-03-09T04:17:55.000000Z location : +55.0043+083.0136/ location-eng : +55.0043+083.0136/ com.android.version: 7.0 Duration: 00:14:00.66, start: 0.000000, bitrate: 12283 kb/s Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 12082 kb/s, SAR 1:1 DAR 16:9, 30.20 fps, 30 tbr, 90k tbn, 60 tbc (default) Metadata: creation_time : 2018-03-09T04:17:55.000000Z handler_name : VideoHandle Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default) Metadata: creation_time : 2018-03-09T04:17:55.000000Z handler_name : SoundHandle At least one output file must be specified
Выше приведен пример обычного видео-файла снятого на Android-телефон.