使用FFmpeg -c copy转MKV到HLS流时首条音轨未继承问题咨询
问题原因排查
- 第一条音轨无声音的核心原因就是你注意到的HLS协议原生不支持PCM格式音轨,你源文件的第一条音轨为PCM类编码(如无损DTS-HD、TrueHD或者原始PCM轨),直接
-c copy封装进HLS后播放器无法识别解码,所以无声音。其余音轨为AAC/AC-3等HLS兼容编码,所以复制后可以正常播放。 - VLC播放输出的m3u8时无法切换音轨,是因为你当前的ffmpeg命令没有添加
-map参数指定所有音轨,ffmpeg默认只会取输入文件的第一条视频、第一条音频、第一条字幕轨输出,最终的HLS流本身就只有1条音轨,自然没有切换选项。
对应解决方案
- 如果你必须保留第一条音轨不重编码:可以切换为DASH协议输出,DASH本身没有编码格式限制,支持封装PCM音轨,你只需要将命令中的
-f hls output.m3u8替换为-f dash output.mpd即可,其余-c copy参数可以保留,注意该方案下只有VLC、MPC-HC等本地全功能播放器可以正常播放PCM音轨的DASH流,网页端、机顶盒等播放端兼容性较差。 - 如果你需要继续使用HLS协议:第一条PCM音轨必须重编码为HLS兼容编码(AAC/AC-3等),无法直接复制输出。你可以单独指定第一条音轨的编码规则,其余兼容音轨保持复制,示例命令如下:
ffmpeg -i "./video.mkv" \ -map 0:v -map 0:a:0 -map 0:a:1 -map 0:a:2 \ -ss 00:00:00 -t 00:00:30 \ -c:v copy \ -c:a:0 aac -ac 6 -b:a:0 640k \ -c:a:1 copy -c:a:2 copy \ -var_stream_map "v:0,agroup:audio a:0,agroup:audio a:1,agroup:audio a:2,agroup:audio" \ -f hls "output.m3u8"
上述命令配置后输出的HLS流即可正常识别多音轨,支持切换。
内容的提问来源于stack exchange,提问作者goodkid38
相关产品推荐
相关产品推荐

