我一直在尝试使用FFmpeg的X11grab模块录制截屏视频,到目前为止,该模块或多或少都可以正常工作.我知道A / V编码是一个复杂的过程,其中包含许多细节,但是我正在努力学习.
我想对视频流进行“轻量级”记录,以便在记录流时尽可能减轻系统负担.我分别用pacat和sox录制两个音频流.后来,整个内容被过滤,归一化,编码,并合并到一个Matroska容器中.
现在,我正在ffmpeg录制要馈送到x264的yuv4多路分解器的原始视频流.我之前尝试过ffv1和直接x264录制.我的系统无法在最终流所需的设置上使用x264进行实时编码,因此在录制完成后,我必须分别重新压缩.我发现ffv1给了我可怕的丢帧机会,而yuv4也给了我,但事实并非如此.我怀疑这是由于硬盘驱动器速度引起的,即使我坐在专用于保存记录数据的SATA3鱼子酱黑中也是如此.
问题是,我应该看哪种视频编解码器组合?直接在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使用情况?如何记录显示顶部的终端窗口的分钟数?如果不是,那么在终端上执行perf记录-睡眠60,然后切换到您执行的操作,先记录一分钟,然后进行perf报告,情况如何?
编辑:我使用了avconv -v警告-f x11grab -s 1680×1050 -r 30000/1001 -i:0.0 -vcodec ffvhuff -s 1280×720 -threads 0 capture.mkv,它很好地记录了RGB.然后,您可以将YUV脱机转码为H.264,通过双通道实现最高质量等.我的传输速度约为24MB /秒,但它似乎是单线程的.我的Core2 @ 2.3Ghz很好用.