Как создать манифест HLS из сегментов MPEG DASH?

Поскольку Apple объявила о поддержке фрагментированного MP4, возможно ли создать манифест DASH (.mpd) и манифест HLS (.m3u8) для одного и того же набора сегментов (для отдельного аудио и видео). Как это сделать?

2 ответа

Решение

Я не знаю, возможно ли это с помощью ffmpeg, но shaka-packager может сделать именно это. Следующая команда выведет сегменты MP4, а также манифесты HLS и DASH, повторно используя сегменты MP4 для обоих (хотя не уверен, что вы можете использовать существующие сегменты MP4, возможно, вам придется сначала мультиплексировать их обратно в один mp4 для каждого видеопотока):

# HLS + DASH
packager \
    'in=h264_baseline_360p_720.mp4,stream=audio,init_segment=audio_init.mp4,segment_template=audio_$Number$.m4s,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
    'in=h264_baseline_360p_720.mp4,stream=video,init_segment=h264_360p_init.mp4,segment_template=h264_360p_$Number$.m4s,playlist_name=h264_360p.m3u8' \
    'in=h264_main_480p_1400.mp4,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s,playlist_name=h264_480p.m3u8' \
    'in=h264_high_720p_2400.mp4,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s,playlist_name=h264_720p.m3u8' \
    --hls_master_playlist_output h264_master.m3u8 \
    --mpd_output h264.mpd \
    --base_urls https://example.org/ \
    --hls_base_url https://example.org/ \
    --generate_static_mpd

Имейте в виду, что на момент написания этой статьи вам нужно было использовать основной код ветки (или google/shaka-packager: последний образ докера), так как новейшая версия 1.6.2 просто завершится с невозможностью вывести как MPD, так и HLS,

Хотя я никогда не использовал его, Bento4 - еще один инструмент, способный упаковать DASH и HLS за один прогон:

mp4-dash.py  | grep hls
  --hls                 Output HLS playlists in addition to MPEG DASH
  --hls-key-url=<url>   HLS key URL (default: key.bin)
  --hls-master-playlist-name=<filename>
  --hls-media-playlist-name=<filename>
  --hls-iframes-playlist-name=<filename>

У меня также есть экспериментальная ветка GPAC/MP4Box на github:

https://github.com/DerouineauNicolas/gpac/tree/m3u8_mpd_rext

Пока что ожидаемое использование следующее:

MP4Box -dash 1000 $OUT_DIR/file.mp4#video $OUT_DIR/file.mp4#audio -m3u8-from-mpd $OUT_DIR/hls.m3u8 -segment-name test-$RepresentationID$-$Number%d$ -out $OUT_DIR/file.mpd

где -m3u8-from-mpd - имя основного списка воспроизведения. Списки воспроизведения Файлы m3u8 создаются в том же каталоге, что и основной список воспроизведения.

Отзывы приветствуются.

Другие вопросы по тегам