自从苹果宣布支持碎片化的MP4以来,是否可以为同一组段(用于单独的音频和视频(创建 DASH 清单 (.mpd( 和 HLS 清单 (.m3u8(。怎么办?
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
请注意,在撰写本文时,您需要使用 master 分支代码(或 google/shaka-packager:latest docker 镜像(,因为最新版本 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>
我在github上也有一个实验性的GPAC/MP4Box分支来做这件事:
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 文件在与主播放列表相同的目录中生成。
欢迎反馈。