来自多个文件的 FFmpeg hls
FFmpeg hls from multiple files
我正在尝试创建一个包含多个音频流的 HLS 播放列表。我有以下文件:
- videoHD.mp4
- videoSD.mp4
- audioEN.mp4
- audioFR.mp4
- audioIT.mp4
我如何在 ffmpeg
命令中将这些全部传输在一起以创建 HLS
播放列表?
2018 年 1 月更新
您现在可以使用 master_pl_name
和 var_stream_map
直接使用 FFmpeg 创建主播放列表。参见 documentation.
根据 Apple 文档,您不能将它们混合在一起,也不能使用单个 HLS 播放列表。
您需要每个视频和每个音轨的播放列表(例如:hd/playlist.m3u8
、sd/playlist.m3u8
、en/playlist.m3u8
等)和一个 link 它们的主播放列表一起。主播放列表控制播放。
下面是文档中的两个视频质量和三个音轨的示例:
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, \
DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, \
DEFAULT=NO,URI="fre/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, \
DEFAULT=NO,URI="sp/prog_index.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="avc1.42e00a,mp4a.40.2",AUDIO="audio"
lo/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="avc1.42e01e,mp4a.40.2",AUDIO="audio"
hi/prog_index.m3u8
ffmpeg
我上次检查时不支持变体播放列表,因此您需要单独创建每个备用播放列表并手动创建主播放列表。
当然,要使所有这些工作正常,各个流必须对齐,否则您将遇到很多同步问题。您可以尝试将 ffmpeg
与多个 I/O:
一起使用
ffmpeg -i input1 -i input2 \
-map … -acodec … -vcodec … output1 \
-map … -acodec … -vcodec … output2 \
-map … -acodec … -vcodec … output3
每个输出的类型都是 HLS
。
来源:
我正在尝试创建一个包含多个音频流的 HLS 播放列表。我有以下文件:
- videoHD.mp4
- videoSD.mp4
- audioEN.mp4
- audioFR.mp4
- audioIT.mp4
我如何在 ffmpeg
命令中将这些全部传输在一起以创建 HLS
播放列表?
2018 年 1 月更新
您现在可以使用 master_pl_name
和 var_stream_map
直接使用 FFmpeg 创建主播放列表。参见 documentation.
根据 Apple 文档,您不能将它们混合在一起,也不能使用单个 HLS 播放列表。
您需要每个视频和每个音轨的播放列表(例如:hd/playlist.m3u8
、sd/playlist.m3u8
、en/playlist.m3u8
等)和一个 link 它们的主播放列表一起。主播放列表控制播放。
下面是文档中的两个视频质量和三个音轨的示例:
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, \
DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, \
DEFAULT=NO,URI="fre/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, \
DEFAULT=NO,URI="sp/prog_index.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="avc1.42e00a,mp4a.40.2",AUDIO="audio"
lo/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="avc1.42e01e,mp4a.40.2",AUDIO="audio"
hi/prog_index.m3u8
ffmpeg
我上次检查时不支持变体播放列表,因此您需要单独创建每个备用播放列表并手动创建主播放列表。
当然,要使所有这些工作正常,各个流必须对齐,否则您将遇到很多同步问题。您可以尝试将 ffmpeg
与多个 I/O:
ffmpeg -i input1 -i input2 \
-map … -acodec … -vcodec … output1 \
-map … -acodec … -vcodec … output2 \
-map … -acodec … -vcodec … output3
每个输出的类型都是 HLS
。
来源: