我一直使用以下命令以 1920x1080 分辨率录制我的桌面,没有任何性能问题:
ffmpeg -f gdigrab -draw_mouse 1 -framerate 60 -probesize 42M -rtbufsize 1024M
-i desktop -c:v libopenh264 -b:v 30M -g 30 -loopfilter 1
-profile:v main -allow_skip_frames 1 -an C:\Users\User\Desktop\recording.mkv
但是,当我尝试使用以下命令录制带有音频的桌面时:
ffmpeg -f gdigrab -draw_mouse 1 -framerate 60 -probesize 42M -rtbufsize 1024M
-thread_queue_size 512 -i desktop -f dshow -channels 2 -sample_rate 44100
-i audio="Stereo-mix (Realtek(R) Audio)" -c:v libopenh264 -b:v 30M -g 30
-loopfilter 1 -profile:v main -allow_skip_frames 1 -c:a libmp3lame -q:a 5
C:\Users\User\Desktop\recording.mkv
性能急剧下降。
使用第一个命令,我可以毫无问题地录制实时虚幻引擎模拟,但当我尝试同时录制音频时,即使是在桌面上拖动资源管理器窗口等基本桌面操作中,我也遇到了性能不佳的问题。视频变得非常不连贯。
我已经尝试使用“-c:a pcm_s16le”选项以 WAV 格式而不是 MP3 格式进行录制,因为我相信它消耗更少的处理能力,但似乎没有区别。
我也尝试过降低帧速率,但是这种调整也无法改善情况。
更新
通过同时运行两个 ffmpeg 命令,我没有遇到任何性能问题。
我使用以下命令创建了一个批处理文件:
@ECHO OFF
REM
START /b ffmpeg -f gdigrab -draw_mouse 1 -framerate 30 -probesize 42M -rtbufsize 1024M -i desktop -c:v libopenh264 -b:v 30M -g 30 -loopfilter 1 -profile:v high -allow_skip_frames 1 -pix_fmt yuv420p -an C:\Users\User\Desktop\recording.mkv
REM
START /b ffmpeg -f dshow -channels 2 -sample_rate 44100 -i audio="Stereo-mix (Realtek(R) Audio)" -c:a pcm_s16le C:\Users\User\Desktop\recording.wav
这并不理想,但是当我在 Adobe Premiere 中加入音频和视频时,音频与视频合理地同步。
因此,这让我更加确定,问题与 FFMPEG 必须在一个进程中执行两个录制操作有关,而不是编解码器性能问题。
我只是不知道除了同时运行两个单独的 ffmpeg 命令之外还能尝试什么。
更新2
该问题似乎特定于 openh264。
通过使用 vp9 + wav 和以下命令:
ffmpeg -f gdigrab -draw_mouse 0 -framerate 30 -probesize 42M -i desktop -f dshow -i audio="Stereo-mix (Realtek(R) Audio)" -c:v libvpx-vp9 -r 30 -g 90 -s 1920x1080 -quality realtime -speed 5 -threads 8 -row-mt 1 -tile-columns 2 -frame-parallel 1 -qmin 4 -qmax 48 -b:v 4500k -c:a pcm_s16le C:\Users\User\Desktop\recording.mkv
我没有遇到速度减慢的情况。不过我还没有测试过其他编解码器。