下列的这些说明和示例为了录制我的屏幕,我使用了以下命令:
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
ffmpeg
ffmpeg
选择使用 h264 (libx264),但我不知道为什么。我感觉这与的参数排序的复杂性有关,但仍然困惑。
答案1
当您有附加输入 ( -i
) 时,-c
before 将被视为您选择的与输入流对应的解码器。我猜想 ffmpeg 会默默忽略-c:v r210
before,-f pulse -ac 2 -i default
因为输入中没有视频流。
要指定用于输出的视频编码器,请将-c
(-c:v r210
在本例中) 放在所有-i
s 后面。