ffmpeg mp4box制作dash流

发布时间 2023-05-07 17:41:36作者: 天道小黑屋

1、检查源文件视频/音频,看是否需重编码,chrome能支持常见的h264/h265/vp9/av1,h265视乎显卡是否支持硬解和浏览器的版本是否足够新,音频方面aac/opus都可支持的如是ac3 dts的就需转码了。

2、假设源文件不需重编码,那么该分辨率不需转码,也不需拆分视频/音频,再用ffmpeg转其它分辨率就可以了,参考

ffmpeg -i video.mp4 -s 1920x1080 -c:v libx264 -keyint_min 30 -g 30 -an -sc_threshold 0 ED1920x1080.mp4

把libx264改为libx265就可以用h265编码了,-keyint_min 30这个是指定最小关键帧间隔,-g 30是指一组帧,这里可参考源视频的帧数。-sc_threshold 0 是禁用场景转换时自动插关键帧,都是与切分段就帧对齐有关的,如是h265 -sc_threshold 0 选项是不起效的,好像是不需要这个参数。-an 是不要音频,所以转出来的没有声音。

3、生成dash流,参考

MP4Box -dash 10000 -rap -frag-rap -dash-profile dashavc264:onDemand -init-segment-ext m4s -bs-switching no vidoe.mp4#video ED1920x1080.mp4#video video.mp4#audio zh-cn.vtt:role=subtitle:lang=简体中文 eng.vtt:role=subtitle:lang=英语 -out dash-mpd.mpd --rawsub

dash 10000指分段时间,这里是10s,因为分段下载有个加速过程,切太小影响连续速度,-rap -frag-rap这两个参数可在质量切换时更为平滑,dashavc264:onDemand指使用内置模版,-init-segment-ext m4s指init文件扩展名指定为m4s与一般mp4分文件区分,默认是mp4扩展名的,-bs-switching no指初始文件分段文件的分配之类的,vidoe.mp4#video指采用文件的第一个视频,ED1920x1080.mp4#video也是这样,video.mp4#audio这里是采用第一个音频,zh-cn.vtt:role=subtitle:lang=简体中文 eng.vtt:role=subtitle:lang=英语 这里是设定字幕,--rawsub是指字幕采用原文件。