FFmpeg:录制屏幕,但只记住最后5分钟?
我使用Ffmpeg在电脑屏幕上连续录制视频。但是,我只需要最后5分钟的视频 是的,我可以在事后编辑视频。但是,这些录制会话可能会持续数小时,并占用大量硬盘空间 是否有办法只记住视频捕获的最后5分钟,并在保存文件之前忘记以前的所有内容?(有点像TiVO) 我找到了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中看到此功能 作为一个解决方案,我创建了一个脚本,将屏幕记录到图片中,并
-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