我在试着渲染一段视频。但我要把它渲染成恒定的速度。例子:
ffmpeg -stream_loop -1 -i 113856_video_0.ts -c:v拷贝-c:a aac -bufsize 3600k -maxrate 1800 k -rtbufsize 15 m -metadata comment="screen113856“-preset超快-g 50 -r 4 -sc_threshold 0 -crf 0 -threads 1 out.mp4
这个ffmpeg会把视频渲染得很好,像这样放出来
frame=77590 fps=113 q=-1.0 size= 596650 1.0 time=00:51:43.67比特率=1574.8kbit/s speed=10.51x
你可以看到speed=10.51x,它很快,但是它占用了我所有的CPU。如果我使用ffmpeg -re,它将呈现为speed=1x,这对CPU很好,但需要时间。我能以特定的速度渲染视频吗?
有一个使用cpulimit的选项。
-l 20 ffmpeg .
几乎解决了我的情况,但是:-有时它不起作用,ffmpeg仍然占用100%的CPU -对于每一个视频,我必须设置数字CPU限制,(-l 20,30)以获得特定的速度。我想自动完成它。
发布于 2017-10-06 09:44:00
下面是一个基于过滤器的粗黑客来模仿这种行为。为了使用它,至少一个音频/视频流必须经过编码。
在您的命令中,由于只有音频被编码,我们将选择该流。如果要将此攻击集成到具有多个输出的现有筛选图中,请将其插入到可能最快地处理其输出的筛选链的末尾,以减少缓冲。
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.mp4FFmpeg提供了一组过滤器:realtime (用于视频)和arealtime (用于音频),将帧的通过限制为实时的进一步过滤器。在实践中,这意味着具有时间戳1秒间隔的帧之间的传输间隔为1秒或更长(如果预先过滤需要更多时间)。因此,黑客是将时间戳折叠到您想要的速度,然后再恢复它们。因为您想要3x,所以时间戳首先减少到1/3,然后在过滤后恢复。
这只能减慢处理速度,而不是加快处理速度。
https://stackoverflow.com/questions/46602042
复制相似问题