首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ffmpeg故意丢弃帧以减小文件大小

ffmpeg故意丢弃帧以减小文件大小
EN

Stack Overflow用户
提问于 2014-10-19 17:14:07
回答 1查看 5.9K关注 0票数 2

我们的安全系统使用ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://192.168.x.x:554/mpeg4 -c copy -t 60 my_input_video.avi记录和归档我们的IP摄像机流

我每分钟用crontab运行一次,所以它每分钟为每个摄像头创建60秒(~15Mb)的视频。当发生入侵时,摄像头会通过FTP和incrontab调用的脚本发送一张图片:

1-立即通过电子邮件转发图片

2-选择涵盖入侵发生的那一分钟的视频,用h264压缩(到~2,6Mb)并通过电子邮件发送

它工作得很好,但是如果小偷穿过不同摄像头的路径,到SMTP服务器的连接速度就不够快,所以视频电子邮件就会延迟。为了避免这种情况,我想对视频进行更多的压缩。我可以降低分辨率(例如,640x480到320x240 ),但有时640x480可以方便地放大看起来在移动的物体……

所以我的想法是丢弃视频中的帧,以降低文件大小。我不关心小偷是否在视频中像“停止运动乐高”一样行走,最重要的是我知道有人这样我就可以行动了。

mediainfo my_input_video.avi说帧速率= 600.000 fps,但它当然是错误的。IP摄像机发送的-use_wallclock_as_timestamps总是假的,因为它随网络质量而变化;这就是为什么我在命令中使用“FPS 1”来记录流。

使用ffmpeg -i my_input_video.avi -vcodec h264 -preset ultrafast -crf 28 -acodec mp3 -q:a 5 -r 8 output.avi可以播放视频,但文件大小较高(3Mb)

使用ffmpeg -i my_input_video.avi -vcodec h264 -preset ultrafast -crf 28 -acodec mp3 -q:a 5 -r 2 output.avi,文件大小较小(2,2Mb),但视频无法工作(它在第一帧被阻塞)。

在过程中间创建mjpeg视频(mjpeg =非隔行扫描的帧)(首先导出为帧较少的mjpeg,然后导出为h264)会产生相同的结果。

你知道我怎么才能让我的小偷像“停止运动乐高”一样走来走去,把文件大小降到最小吗?

谢谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2014-10-20 11:14:56

你对文件大小的限制是什么? 2.6MB的60秒视频对我来说似乎相当合理,大约是350kbps,这对于视频质量来说是相当低的。

您需要指定视频比特率-b:v 125000 (125kbps,应降至约900kb)来控制您希望视频编码的比特率。你没有给FFMpeg足够的提示,你想如何处理视频,所以它选择了你不喜欢的任意值。当你降低帧速率时,它只会耗尽缓冲区,为每个帧分配更多的比特。(您需要记住的一件重要事情是,当您在较长的时间内拉伸视频时,场景更有可能需要I帧(完全编码的帧与基于前一帧的帧),因此降低帧速率会有所帮助,但可能没有您想象的那么有帮助)。

你的“(它在第一帧被阻塞)。”最有可能的问题是,当流不在I帧上时,您尝试开始解码它,而您的设置也不是问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26449063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档