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


Настройка рабочих станций под управлением Ubuntu Linux
ffmpeg linux mp4 ubuntu vp9 видео
 
 

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


(последние правки 5 дней, 18 часов)

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

Сжатие видео-файлов средствами 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-телефон.

Моя официальная страница на FaceBook
Мой микроблог в твиттер

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

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

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


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

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

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


Как вы наверное понимаете, бесплатно сейчас работать никто не будет и если ответ на ваш вопрос потребует больше трех минут времени и вам требуется полноценная консультация, то расценки на мои услуги представленны ниже.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .