Обработка видео для публикации в интернет (подготовка к публикации видео на Youtube при помощи FFmpeg)

Рассмотрим несколько типовых команд по подготовке видео к публикации в WEB и, хотя, тот же YouTube приведет ваше видео в требующийся формат автоматически, вам все равно когда-нибудь придется подготовить видео файл строго определенного формата. Все представленные ниже операции легко автоматизируются, параллелятся и т.п.. Вы с легкостью сможете подготовить видео для публикации на вашем сайте без использования сторонних видео-хостингов (например, при публикации видео со спорными авторскими правами).

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 01 Мар 2018 (последние правки 1 месяц, 1 неделя)

codec eset tar ubuntu видео кодек

Сжатие видео-файлов средствами FFMPEG

Конвертируем видео в формат .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-телефон.

Похожие статьи

Сборка пакета FFmpeg из исходных кодов (с поддержкой CUDA)

Сборка пакета FFmpeg из исходных кодов (с поддержкой CUDA)

Использование аппаратного ускорения позволяет значительно ускорить операции обработки видео, но штатное ПО входящее в поставку дистрибутива Ubuntu Linux не поддерживает аппаратное кодирование/декодирование видео и для активации поддержки NVENCODE вам потребуется собрать FFMPEG из исходных кодов.


Сборка MELT из исходных кодов (сборка окружения для тестирования git-версии Kdenlive)

Сборка MELT из исходных кодов (сборка окружения для тестирования git-версии Kdenlive)

В прошлых заметках я уже рассказывал как собрать ffmpeg с поддержкой аппаратного кодирования и декодирования видео-файлов. Сборка ffmpeg с поддержкой CUDA ускорило обработку видео-файлов в четыре раза по сравнению с обработкой на CPU. Следующим этапом я решил применить все имеющиеся наработки для подключения этого функционала в Kdenlive, что теоретически должно ускорить обработку моих видео-заметок.


Скрипты для автоматической сборки Kdenlive из GIT-репозитария с поддержкой CUDA

Скрипты для автоматической сборки Kdenlive из GIT-репозитария с поддержкой CUDA

Как вы наверное знаете, я иногда подготавливаю видео, для своего видео блога в видео-редакторе Kdenlive и в нескольких прошлых статьях я уже рассказывал как можно немного ускорить создание видео-клипов в этом редакторе, но сегодня я пошел дальше и немного модифицировал скрипты автоматизированной сборки Kdenlive для поддержки CUDA.


Отзывы и комментарии