FFmpeg:录制屏幕,但只记住最后5分钟?

FFmpeg:录制屏幕,但只记住最后5分钟?,ffmpeg,video-streaming,video-capture,screen-capture,pyffmpeg,Ffmpeg,Video Streaming,Video Capture,Screen Capture,Pyffmpeg,我使用Ffmpeg在电脑屏幕上连续录制视频。但是,我只需要最后5分钟的视频 是的,我可以在事后编辑视频。但是,这些录制会话可能会持续数小时,并占用大量硬盘空间 是否有办法只记住视频捕获的最后5分钟,并在保存文件之前忘记以前的所有内容?(有点像TiVO) 我找到了 -fs limit_size 及 …但一旦达到极限,这些似乎就停止了。也许有一个反向开关?我只想保留最后的1000000字节或其他内容。我同意我希望在ffmpeg中看到此功能 作为一个解决方案,我创建了一个脚本,将屏幕记录到图片中,并

我使用Ffmpeg在电脑屏幕上连续录制视频。但是,我只需要最后5分钟的视频

是的,我可以在事后编辑视频。但是,这些录制会话可能会持续数小时,并占用大量硬盘空间

是否有办法只记住视频捕获的最后5分钟,并在保存文件之前忘记以前的所有内容?(有点像TiVO)

我找到了

-fs limit_size


…但一旦达到极限,这些似乎就停止了。也许有一个反向开关?我只想保留最后的1000000字节或其他内容。

我同意我希望在ffmpeg中看到此功能

作为一个解决方案,我创建了一个脚本,将屏幕记录到图片中,并不断删除旧图片。不幸的是,它不保存音频。这是剧本

#!/bin/bash 
set -e -u

mkdir "$HOME/history" || true
rm "$HOME"/history/img*.png || true

# Get screen resolution.
RES="$(xwininfo -root | grep -Po 'geometry[^+]*' | sed 's/^\S* //')"

# Record the screen into images into /home/username/history/ one per second.
avconv -s "$RES" -f x11grab -i :0.0 -r 1  -f image2 "$HOME/history/img%06d.png" &

AVCONV_PID=$!

trap "kill $AVCONV_PID" INT TERM EXIT

while true; do
    # Delete screen images older than 5 minutes.
    find "$HOME/history" -name "img*.png" -mmin +5 -exec rm {} +
    sleep 10
done
如果希望每秒5张图片,请将零件
-r1
更改为
-r5
。请参阅此链接

PS.

您也可以使用ffmpeg而不是avconv。

据我所知,没有这样的功能。考虑提交一个补丁来实现这一点,或者在其上生成一个特征请求。一个选项是与
-segment\u time
选项一起使用,然后根据您的要求以某种方式处理旧段。可以使用
segment
muxer:
-f segment-segment\u time 60-segment\u wrap 2输出%d.mkv
。感谢@Gyan。看这个。
#!/bin/bash 
set -e -u

mkdir "$HOME/history" || true
rm "$HOME"/history/img*.png || true

# Get screen resolution.
RES="$(xwininfo -root | grep -Po 'geometry[^+]*' | sed 's/^\S* //')"

# Record the screen into images into /home/username/history/ one per second.
avconv -s "$RES" -f x11grab -i :0.0 -r 1  -f image2 "$HOME/history/img%06d.png" &

AVCONV_PID=$!

trap "kill $AVCONV_PID" INT TERM EXIT

while true; do
    # Delete screen images older than 5 minutes.
    find "$HOME/history" -name "img*.png" -mmin +5 -exec rm {} +
    sleep 10
done