FFmpeg捕获音频时未遵循指定r210视频编解码器的问题求助
FFmpeg捕获音频时未遵循指定r210视频编解码器的问题求助
嘿,我来帮你拆解这个问题!你遇到的情况完全是FFmpeg参数位置敏感导致的——这可是FFmpeg里最容易踩的坑之一,哪怕是老用户偶尔也会栽在这里。
先给你说清楚核心原因:FFmpeg的命令参数是按顺序生效的,编码选项(比如-c:v、-c:a)必须放在所有输入源参数的后面,才能确保它被应用到最终的输出流上。你之前的命令里把-c:v r210放在了音频输入(-f pulse -ac 2 -i default)之前,这就导致FFmpeg没有正确识别到你要强制视频用r210编码,反而 fallback 到了Matroska容器默认的视频编码(也就是你看到的h264/libx264)。
正确的命令应该是这样的:
ffmpeg -video_size 800x600 -framerate 60 -f x11grab -i :0.0 -f pulse -ac 2 -i default -c:v r210 -c:a copy test.mkv
为什么这样就生效了?
把-c:v r210移到所有-i输入参数之后,相当于明确告诉FFmpeg:“处理完所有输入源后,对输出的视频流用r210编码,音频流直接复制”。这样FFmpeg就不会自作主张替换你的编码选择了。
你可以对比下之前单独录视频的命令:-c:v r210是在唯一的输入-i :0.0之后,所以能正确生效;而加了音频输入后,编码参数的位置没跟上,才出了问题。
如果想要更严谨,还可以加上流映射来明确指定要处理的流,避免歧义(不过上面的命令已经足够解决问题了):
ffmpeg -video_size 800x600 -framerate 60 -f x11grab -i :0.0 -f pulse -ac 2 -i default -map 0:v -map 1:a -c:v r210 -c:a copy test.mkv
这里的-map 0:v表示用第一个输入的视频流,-map 1:a表示用第二个输入的音频流,进一步消除了FFmpeg自动选择流的可能。
备注:内容来源于stack exchange,提问作者jaymmer - Reinstate Monica
相关产品推荐
相关产品推荐

