为什么 ffmpeg 在捕获音频时不尊重我对视频编解码器的选择?

为什么 ffmpeg 在捕获音频时不尊重我对视频编解码器的选择?

下列的这些说明和示例为了录制我的屏幕,我使用了以下命令:

ffmpeg -video_size 800x600 -framerate 60 -f x11grab -i :0.0 -c:v r210 test.mkv

我明确选择了r210编解码器,因为它是无损的(并且未压缩;录制完成后我将支付编码惩罚),并且ffmpeg对此没有异议:

Output #0, matroska, to 'test.mkv':
Metadata:
    encoder         : Lavf58.45.100
    Stream #0:0: Video: r210 (r210 / 0x30313272), gbrp10le, 800x600, q=2-31, 958464 kb/s, 60 fps, 1k tbn, 60 tbc
    Metadata:
    encoder         : Lavc58.91.100 r210

但这还不够:我还想要音频。按照给出的示例,我想出了:

ffmpeg -video_size 800x600 -framerate 60 -f x11grab -i :0.0 -c:v r210 -f pulse -ac 2 -i default -c:a copy test.mkv

会发生什么?

Output #0, matroska, to 'test.mkv':
Metadata:
    encoder         : Lavf58.45.100
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 800x600, q=-1--1, 60 fps, 1k tbn, 60 tbc
    Metadata:
    encoder         : Lavc58.91.100 libx264
    Side data:
    cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s

ffmpegffmpeg选择使用 h264 (libx264),但我不知道为什么。我感觉这与的参数排序的复杂性有关,但仍然困惑。

答案1

当您有附加输入 ( -i) 时,-cbefore 将被视为您选择的与输入流对应的解码器。我猜想 ffmpeg 会默默忽略-c:v r210before,-f pulse -ac 2 -i default因为输入中没有视频流。

要指定用于输出的视频编码器,请将-c(-c:v r210在本例中) 放在所有-is 后面。

相关内容