Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux FFmpeg屏幕广播录制:使用哪种编解码器?_Linux_Ffmpeg_X264_Video Codecs - Fatal编程技术网

Linux FFmpeg屏幕广播录制:使用哪种编解码器?

Linux FFmpeg屏幕广播录制:使用哪种编解码器?,linux,ffmpeg,x264,video-codecs,Linux,Ffmpeg,X264,Video Codecs,我一直在尝试使用FFmpeg的X11grab模块录制屏幕广播,到目前为止,该模块工作得或多或少。我知道a/v编码是一个复杂的过程,有很多细节,但我正在尽全力学习 我想对视频流进行“轻量级”录制,这会在录制视频流时对系统造成尽可能小的压力。我用pacat和sox分别录制了两个音频流。之后,整个过程被过滤、规范化、编码,并合并到Matroska容器中 现在,我正在让ffmpeg录制一个原始视频流,以提供给x264的yuv4解复用器。之前我曾尝试过ffv1和直接x264录制。我的系统无法按照我想要的最

我一直在尝试使用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
你试过了吗

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

为了测试磁盘写入性能,只需分配100MB,从
/dev/uradom
中读取100MB,并在磁盘空闲时将缓冲区写入该磁盘上的文件。测量写入所需的时间(从urandom读取将需要时间)。Linux具有写回功能,这意味着它每5秒将脏页刷新到磁盘,而不是在您写入时。使用
fdatasync
(或完全
fsync
)将为您提供数据在磁盘上之前的实时性

为什么看不到ffmpeg的cpu使用率?记录一分钟显示
顶部的终端窗口如何?如果没有,那么在终端中进行一次睡眠60,然后切换到您要做的事情,记录一分钟后的性能报告如何


编辑:我使用了
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很好。

你的屏幕广播分辨率是多少?我正在以1080p的速度录制整个屏幕,并动态缩放到720p。提到了一些好的编解码器是的,我试过huffyuv。在录制过程中,我将四个核心中的两个专门用于ffmpeg。此外,我的问题的一部分是关于精确定位我的问题,这意味着我不知道它是否与CPU或HDD相关。我也不确定是否能找到用于写入磁盘的数据速率。您正在将RGB(本机像素)转换为YUV。尝试用RGB录制。获取CPU使用率应该像在录制时运行
top
(或
htop
,或
perf record-linux工具中的睡眠60
)一样简单。磁盘写入速率(以字节/秒为单位)是您在一分钟内记录的文件大小除以60。磁盘应该能够以100MB/秒的速度写入数据(如果磁盘仅用于此目的,并且不执行其他导致其查找的工作(包括读取),则按顺序写入)。YUV4不喜欢(A)RGB像素格式。x264不会吃除原始y4m流之外的任何东西,ffmpeg在告诉它使用x264时会自动选择yuv420p。视频文件大小约为每分钟2.30Gb。这意味着它的速度大约为40Mb/s。htop报告分配给ffmpeg的核心每个负载约为30%。