FFmpeg来自多个文件

时间:2015-06-26 05:22:49

标签: video ffmpeg hls

我正在尝试创建一个包含多个音频流的HLS播放列表。我有以下文件:

- videoHD.mp4
- videoSD.mp4
- audioEN.mp4
- audioFR.mp4
- audioIT.mp4

如何在ffmpeg命令中将这些内容全部转换为创建HLS播放列表?

1 个答案:

答案 0 :(得分:4)

2018年1月更新

您现在可以使用master_pl_namevar_stream_map直接使用FFmpeg创建主播放列表。请参阅documentation

根据Apple文档,您不能将它们全部复制在一起,并且您无法使用单个HLS播放列表。

您需要为每个视频和每个音轨(例如:hd/playlist.m3u8sd/playlist.m3u8en/playlist.m3u8等)和主播放列表添加播放列表,以便将它们全部链接在一起。主播放列表控制播放。

以下是来自文档的两个视频质量和三个音轨的示例:

#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类型。

来源:

About HTTP Live Streaming

Technical Note TN2288

FFmpeg - Creating Multiple Outputs