Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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
Performance 保持ffmpeg渲染为恒定速度(3倍)_Performance_Video_Ffmpeg_Render - Fatal编程技术网

Performance 保持ffmpeg渲染为恒定速度(3倍)

Performance 保持ffmpeg渲染为恒定速度(3倍),performance,video,ffmpeg,render,Performance,Video,Ffmpeg,Render,我正在尝试渲染一个视频。但我想把它渲染成恒定的速度。 例如: ffmpeg-stream_loop-1-i 113856_video_0.ts-c:v copy-c:a aac-bufsize 3600k-maxrate 1800k-rtbufsize 15M-metadata comment=“screen113856”-预设超快-g50-r4-sc_阈值0-crf 0-线程1 out.mp4 这个ffmpeg可以很好地渲染视频,像这样输出 帧=77590 fps=113 q=-1.0大小=5

我正在尝试渲染一个视频。但我想把它渲染成恒定的速度。 例如:

ffmpeg-stream_loop-1-i 113856_video_0.ts-c:v copy-c:a aac-bufsize 3600k-maxrate 1800k-rtbufsize 15M-metadata comment=“screen113856”-预设超快-g50-r4-sc_阈值0-crf 0-线程1 out.mp4

这个ffmpeg可以很好地渲染视频,像这样输出

帧=77590 fps=113 q=-1.0大小=596650kB时间=00:51:43.67比特率=1574.8kbits/s速度=10.51x

你可以看到速度=10.51x,速度很快,但占用了我所有的CPU。如果我使用ffmpeg-re,它的渲染速度为1x,对CPU很好,但需要时间。我可以以特定速度渲染视频吗

有一个选项可以使用cpulimit

cpulimit-L20FFMPEG

几乎解决了我的问题,但: -有时它不工作,ffmpeg仍然需要100%的CPU
-对于每个视频,我必须设置CPU数量限制(-l20,30),以获得特定的速度。我想自动完成这项工作。

这里有一个基于过滤器的粗糙黑客程序来模拟这种行为。要使用它,必须至少对一个音频/视频流进行编码

在您的命令中,由于只对音频进行编码,我们将选择该流。如果要将此攻击集成到具有多个输出的现有filtergraph中,请将其插入可能最快处理其输出的filterchain末尾,以减少缓冲

ffmpeg -stream_loop -1 -i 113856_video_0.ts \
-af asetpts=PTS/3,arealtime,asetpts=PTS*3 
-c:v copy -c:a aac -metadata comment="screen113856" -threads 1 out.mp4
FFmpeg提供了一组过滤器:
realtime
(用于视频)和
arealtime
(用于音频),用于限制帧的实时通过以进一步过滤。在实践中,这意味着时间戳间隔1秒的帧被传送间隔1秒或更长(如果先前的过滤需要更多时间)。因此,黑客就是把时间戳压缩到你想要的速度,然后再恢复它们。由于您需要3倍,时间戳首先减少到1/3,然后在过滤器之后恢复

这只会减慢处理速度,而不会加快处理速度