参数说明:
-map和-i的对应关系:
-map 0:v -map 0:a的作用是在-i中查找输入项,-map 0:v指第一个-i的视频码,-map 1:v指第二个-i的视频码,音频同理。
-map 0:v视频流、编码方式-c:v:0、-b:v:0码率的对应关系:
-map 0:v -map 0:a -map 0:v -map 0:a查找编码方式,顺序可以颠倒,使用编号排序,第一个-map 0:v找-c:v:0 ,第二个-map 0:v找-c:v:1,第一个音频-map 0:a找-c:a:0 ,第二个音频-map 0:a找-c:a:1 ,以此类推。
-s:0和-map对应关系
-s:0是-map来调用的,-s:0是第一个-map调用的,-s:1是第二个-map调用的,一般用户调整-map n:v视频流分辨率时使用-s:n。
-var_stream_map中v:0, a:0和-map 0:v的对应关系
-var_stream_map "v:0,a:0,name:ceshi_hd v:1,a:1,name:ceshi_sd" 的对应方法相对简单,其内部的顺序怎么混乱,但v:0对应第一个视频map,即-map 0:v。a:0对应第一个音频-map 0:a。v:1对应第二个视频-map 0:v。a:1对应第二个音频-map 0:a。
-hls_time 10 -hls_list_size 0:-hls_time 10每个片段时间长短,这里是10秒;-hls_list_size 0默认主控文件只显示部分片段播放,设置0,主控列表保留所有片段。直播时修改参数-hls_time 5 -hls_list_size 5,5秒切一个片段,主控只保留5个片段,实时更新片段。
源视频数据流情况如下图(使用命令ffmpeg –i 视频名称,查看):

原视频文件编码及码率如上图,参数解释如下:
1音视频总码率为1247kb/s
2视频编码为h264
3视频分辨率为1280*720
4视频码率为1052kb/s
5音频编码为aac
6音频码率为191kb/s
一、产生2个及两个以上的视音频组
(一)生成两组的视音频文件,没有主控
fmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" -hls_time 10 -hls_list_size 0 live/out_%v.m3u8
解释:
1. -map 0:v -map 0:a -map 0:v -map 0:a都抓取同一个文件的视频流和音频流,即-i orange.mp4。
2. -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k,参照-map 0:v -map 0:a -map 0:v -map 0:a,设置情况为:-map 0:v -b:v:0 1000k -map 0:a -b:a:0 64k -map 0:v -b:v:1 256k -map 0:a -b:a:1 32k。效果:第一个视频流 第一个视频流码率 第一个音频流 第一个音频流码率 第二个视频流 第二个视频流码率 第二个音频流 第二个音频流码率
3. 在一个文件夹下生成两个out_%v.m3u8主控文件,即out_0.m3u8、out_1.m3u8,生成片段名称为out_00.ts至out_0*.ts(*从0开始增加),out_1.m3u8主控列表播放out_10.ts至out_1*.ts(*从0开始增加)。
4. 修改两个视频流的分辨率,使用-s:0参数,如下:
ffmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" -hls_time 5 -hls_list_size 0 live/out_%v.m3u8
ffmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" -hls_time 5 -hls_list_size 0 live/out_%v.m3u8
产生两个播放视音频流,一个视频音流的视频流是1000k,音频流的码率是64k,另一个视频流码率256k,音频流码率是32k,两个视音频流产生两个m3u8播放列表。但是所有的m3u8和ts流文件在一个文件夹内,可以用如下办法让两个视频音频流变的更加易辨识,把变量放在文件夹命名上,从而形成两个文件夹,文件夹内有主控文件out.m3u8和ts文件。
ffmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" -hls_time 5 -hls_list_size 0 live/vs_%v/out.m3u8
ffmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" -hls_time 5 -hls_list_size 0 live/vs_%v/out.m3u8
产生两个m3u8视频音频文件,分别在两个文件夹vs_1和vs_0中内,每个文件夹内分别有一个out.m3u8文件。
ffmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 live/out_%v.m3u8
ffmpeg -i orange.mp4 -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 live/out_%v.m3u8
在live文件夹下生成两个带名称的视音频流m3u8和ts文件,分别为out_my_hd.m3u8/ out_my_hd0.ts和out_my_sd.m3u8/ out_my_sd0.ts。
5. 可以修改编码方式、码率等信息
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 live/out_%v.m3u8
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 live/out_%v.m3u8
注:增加修改音视频编码方式的内容-c:v:0 h264和-c:v:1 h264
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -c:a:0 aac -b:a:0 64k -c:a:1 libmp3lame -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 live/vs_%v/out.m3u8
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -c:a:0 aac -b:a:0 64k -c:a:1 libmp3lame -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 live/vs_%v/out.m3u8
修改第二个音频流的编码方式为libmp3lame
第一个音视频流的编码方式如下图:

第二个音视频流的编码方式如下图:

二、根据网络带宽情况自适应播放视频流
一般情况,m3u8文件在播放时会主动根据网络带宽情况播放视频流,此处可以使用主控m3u8文件,播放码率不同的文件,从而实现根据带宽自适应播放不同音视频码率视频流的效果。
(一)生成一个主控文件m3u8文件,两个视音频码流不同的文件,自适应带宽播放视频流。
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 -master_pl_name orange.m3u8 live/vs_%v/out.m3u8
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -b:a:0 64k -b:a:1 32k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map " v:0,a:0,name:my_hd v:1,a:1,name:my_sd " -hls_time 5 -hls_list_size 0 -master_pl_name orange.m3u8 live/vs_%v/out.m3u8
生成主控orange.m3u8文件,两个vs_my_hd/ vs_my_sd文件夹,文件夹内有分主控文件out.m3u8文件。
主控orange.m3u8文件内容:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=950400,RESOLUTION=960x540,CODECS="avc1.64001f,mp4a.40.2" vs_my_hd/out.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=316800,RESOLUTION=540x330,CODECS="avc1.640015,mp4a.40.2"
vs_my_sd/out.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=950400,RESOLUTION=960x540,CODECS="avc1.64001f,mp4a.40.2" vs_my_hd/out.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=316800,RESOLUTION=540x330,CODECS="avc1.640015,mp4a.40.2" vs_my_sd/out.m3u8
(二)生成一个主控m3u8文件,两个不同分辨率和码率的视频流,一个音频流,自适应带宽播放视频流。
ffmpeg -i orange.mp4 -c:v:0 h264 -b:v:0 800k -c:v:1 h264 -b:v:1 256k -c:a:0 aac -b:a:0 64k -s:0 960*540 -s:2 540*330 -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0,agroup:low,name:video a:

最低0.47元/天 解锁文章
1369

被折叠的 条评论
为什么被折叠?



