Создание основного списка воспроизведения после создания нескольких воспроизведений с помощью FFMPEG для мультибитрейтного VOD

Я пытаюсь загрузить видео на сервер, преобразовать видеофайл в 3 разных видео с разными разрешениями (например, 1080p, 720p, 480p), а затем использовать FFMPEG для создания основного списка воспроизведения из каждого из разрешений в одном и том же команда? Это возможно? Пока я могу загрузить видео и создать 3 разных разрешения, но я не смог использовать ffmpeg для создания главного манифеста. Пока моя команда FFMPEG выглядит так:

 ffmpeg -hide_banner -y -i beach.mkv \
  -vf scale=w=640:h=360:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod  -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename beach/360p_%03d.ts beach/360p.m3u8 \
  -vf scale=w=842:h=480:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k -hls_segment_filename beach/480p_%03d.ts beach/480p.m3u8 \
  -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 2800k -maxrate 2996k -bufsize 4200k -b:a 128k -hls_segment_filename beach/720p_%03d.ts beach/720p.m3u8 

Эта команда основана на исследовании этой страницы https://docs.peer5.com/guides/production-ready-hls-vod/

Что мне нужно добавить в команду FFMPEG для создания основного списка воспроизведения?


person Bill    schedule 18.12.2018    source источник


Ответы (1)


Для тех, кто может столкнуться с той же проблемой, я нашел способ создать основной список воспроизведения с теми же параметрами кодирования:

ffmpeg -hide_banner -y -i beach.mkv \
  -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -ar 48000 \
  -map 0:v:0 -map 0:v:0 -map 0:v:0 -map 0:a:0 -map 0:a:0 -map 0:a:0 \
  -c:v:0 h264 -profile:v:0 main -filter:v:0 "scale=w=640:h=360:force_original_aspect_ratio=decrease" -b:v:0 800k -maxrate:v:0 856k -bufsize:v:0 1200k \
  -c:v:1 h264 -profile:v:1 main -filter:v:1 "scale=w=842:h=480:force_original_aspect_ratio=decrease" -b:v:1 1400k -maxrate:v:1 1498k -bufsize:v:1 2100k \
  -c:v:2 h264 -profile:v:2 main -filter:v:2 "scale=w=1280:h=720:force_original_aspect_ratio=decrease" -b:v:2 2800k -maxrate:v:2 2996k -bufsize:v:2 4200k \
  -c:a:0 aac -b:a:0 96k \
  -c:a:1 aac -b:a:1 128k \
  -c:a:2 aac -b:a:2 128k \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -master_pl_name beach-master.m3u8 \
  -f hls -hls_time 4 -hls_playlist_type vod -hls_list_size 0 \
  -hls_segment_filename "beach-v%v/beach-%03d.ts" "beach-v%v/beach.m3u8"

Если вы видите ошибку:

Only '-vf scale=w=640:h=360:force_original_aspect_ratio=decrease' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-vf scale=w=842:h=480:force_original_aspect_ratio=decrease' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-vf scale=w=1280:h=720:force_original_aspect_ratio=decrease' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-af (null)' read, ignoring remaining -af options: Use ',' to separate filters

Согласно этому соответствующему ответу, это кажется ложным срабатыванием.

Структура каталога:

beach-master.m3u8
beach-v0/
├──beach.m3u8
├──beach-000.ts
├──beach-001.ts
└──...
beach-v1/
└──...
...

Если вы хотите, чтобы все файлы находились в одном каталоге, измените hls_segment_filename на:

-hls_segment_filename "beach-v%v-%03d.ts" "beach-v%v.m3u8"

И если вы хотите избежать масштабирования, измените параметры filter на:

-filter:v:0 "scale=w='min(640,iw)':h='min(360,ih)':force_original_aspect_ratio=decrease"
-filter:v:1 "scale=w='min(842,iw)':h='min(480,ih)':force_original_aspect_ratio=decrease"
-filter:v:2 "scale=w='min(1280,iw)':h='min(720,ih)':force_original_aspect_ratio=decrease"
person Ale Felix    schedule 15.09.2020