我一直在尝试使用FFmpeg的X11grab模块录制截屏视频,到目前为止,该模块或多或少都可以正常工作。我知道A/V编码是一个复杂的过程,其中包含许多细节,但是我正在努力学习。

我想对视频流进行“轻量级”记录,以便在记录流时尽可能减轻系统负担。我用pacat和sox分别录制两个音频流。后来,整个内容被过滤,归一化,编码,并合并到一个Matroska容器中。

现在,我正在ffmpeg录制要馈送到x264的yuv4多路分解器的原始视频流。我之前尝试过ffv1和直接x264录制。我的系统无法在最终流所需的设置上使用x264进行实时编码,因此在录制完成后,我必须分别重新压缩。我发现ffv1给了我可怕的丢帧机会,而yuv4也给了我,但事实并非如此。我怀疑这是由于硬盘速度造成的,即使我坐在专用于保存记录数据的SATA3 fish 子酱黑中也是如此。

问题是,我应该看哪种视频编解码器组合?直接在x264中录制并在以后重新压缩为“更好”的x264?原始视频,然后压缩?我该如何定位问题,例如遇到的丢帧现象?

编辑:这是我当前使用的ffmpeg行。

ffmpeg -v warning -f x11grab -s 1920x1080 -r 30000/1001 -i :0.0\
-vcodec rawvideo -pix_fmt yuv420p -s 1280x720\
-threads 0\
recvideo.y4m

最佳答案

您尝试过http://en.wikipedia.org/wiki/Huffyuv吗?

您确定知道您的问题是CPU还是磁盘带宽吗?您要写入磁盘的数据速率是多少? ffmpeg在您的比特率和设置下,编解码器需要多少CPU?我假设您没有录制闲置的计算机-剩下多少资源用于录制?

要测试磁盘写性能,只需分配100MB,从/dev/urandom中读取100MB,然后在磁盘空闲时将缓冲区写入该磁盘上的文件。测量写入需要多长时间(从urandom读取将花费时间)。 Linux具有回写功能,这意味着它每隔5秒就会将脏页刷新到磁盘上,而不是在您写入后立即刷新。使用fdatasync(或完整的fsync)将为您提供实时的数据直到磁盘上。

为什么看不到ffmpeg的cpu使用情况?如何记录显示top的终端窗口的分钟数呢?如果不是,那么终端中的perf record -a sleep 60怎么样,然后切换到您的工作方式,先记录一分钟,然后再记录perf report

编辑:我使用了avconv -v warning -f x11grab -s 1680x1050 -r 30000/1001 -i :0.0 -vcodec ffvhuff -s 1280x720 -threads 0 capture.mkv,它非常适合以RGB记录。然后,您可以将YUV脱机转码为H.264,通过双通道实现最高质量等。我获得了大约24MB/秒的速度,但它似乎是单线程的。我的Core2 @ 2.3Ghz很好用。

关于linux - FFmpeg截屏录制: which codecs to use?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10166204/

10-15 23:59