Как создать манифест 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 создаются в том же каталоге, что и основной список воспроизведения.
Отзывы приветствуются.