webm dash encoding... Каковы правильные параметры ffmpeg?
Я озадачен кодированием видео в формат, совместимый с тире. Я иду от.mp4 к.webm
Во-первых, я использую OS X и ffmpeg 2.5.4.
Вот команды кодирования, которые я использую в своем тесте (я получил их отсюда):
ffmpeg -i IMG_0113.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 25k -g 1 -tile-columns 4 -frame-parallel 1 -an -f webm -dash 1 video_160x90_25k.webm
ffmpeg -i IMG_0113.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 50k -g 1 -tile-columns 4 -frame-parallel 1 -an -f webm -dash 1 video_160x90_50k.webm
ffmpeg -i IMG_0113.mp4 -vn -acodec libvorbis -ab 128k -dash 1 audio_128k.webm
ffmpeg -f webm_dash_manifest -i video_160x90_25k.webm -f webm_dash_manifest -i video_160x90_50k.webm -f webm_dash_manifest -i audio_128k.webm -c copy -map 0 -map 1 -map 2 -f webm_dash_manifest -adaptation_sets "id=0,streams=0,1 id=1,streams=2" manifest.mpd
Во-вторых, проблема не в моем сервере, так как я скачал примеры отсюда, и они работают на плеере dash.js на 100% при обслуживании с моего локального сервера.
Пожалуйста, кто-нибудь может указать мне правильное направление? Или предоставьте образец команд ffmpeg, используемых для получения правильного формата вывода.
Спасибо, Дин.
2 ответа
Хорошо, здесь идет, удалось решить это. Надеюсь, это спасет кого-то еще от неприятностей.
Во-первых, вот решение.
Шаг 1: (вырезать аудио из видео и создать один аудио файл)
ffmpeg -i IMG_0113.mp4 -c:v libvpx -s 160x90 -threads 4 -b:v 25k -tile-columns 4 -frame-parallel 1 -an -keyint_min 30 -g 30 -f webm video_160x90_25k.webm
ffmpeg -i IMG_0113.mp4 -c:v libvpx -s 160x90 -threads 4 -b:v 50k -tile-columns 4 -frame-parallel 1 -an -keyint_min 30 -g 30 -f webm video_160x90_50k.webm
ffmpeg -i IMG_0113.mp4 -vn -acodec libvorbis -ab 128k audio_128k.webm
Шаг 2: (используя sample_muxer из проекта libwebm, доступного здесь, для создания ключевых точек видео)
sample_muxer -i video_160x90_25k.webm -o video_160x90_25k_cued.webm
sample_muxer -i video_160x90_50k.webm -o video_160x90_50k_cued.webm
Шаг 3: (Используйте ffmpeg для создания ключевых точек звука)
ffmpeg -i audio_128k.webm -vn -acodec libvorbis -ab 128k -dash 1 audio_128k_cued.webm
Шаг 4: (Используйте ffmpeg для создания файла манифеста webm dash .mpd)
ffmpeg -f webm_dash_manifest -i video_160x90_25k_cued.webm -f webm_dash_manifest -i video_160x90_50k_cued.webm -f webm_dash_manifest -i audio_128k_cued.webm -c copy -map 0 -map 1 -map 2 -f webm_dash_manifest -adaptation_sets "id=0,streams=0,1 id=1,streams=2" manifest.mpd
Во-вторых, вот объяснение.
ffmpeg (моя версия по крайней мере) неправильно создавала ключевые точки в видеофайлах (при добавлении параметра -dash 1). Я определил это, исследуя видеофайлы и понимая формат файла webm ( прочитайте это, если хотите узнать больше).
Затем я наткнулся на sample_muxer, прочитав эту страницу, и решил посмотреть, будет ли он лучше обрабатывать ключевые моменты видео, которые ffmpeg не получает. Вау Вау, это сделал!
Я заметил, что ключевые точки в извлеченном аудиофайле из ffmpeg (с использованием параметра -dash 1) создавались правильно!
Поколение ffmpeg манифеста webm dash также работает хорошо!
Для воспроизведения видео я обнаружил, что shaka-player работает лучше всего, но я не мог его использовать, так как мне требовалось воспроизведение видео из контейнера cefpython, а shaka-player не работал с последней версией cef (встроенная хромированная среда), включенной в выпуск cefpython.,
Затем я написал свой собственный плеер на основе этого полезного сайта из Google
Во всяком случае, надеюсь, что это помогает кому-то
У меня была похожая проблема. Когда я конвертировал mpeg2 в vp9 с помощью ffmpeg v3.4.2, выходное видео не было доступно для поиска в проигрывателе VLC (поиск занял много времени). Когда я попробовал ffmpeg v4.0.2, видео было доступно для поиска в проигрывателе VLC. Похоже, это исправлено в ffmpeg v4.0.2