- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的安全系统使用 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摄像头发送的FPS总是假的,因为它随网络质量而变化;这就是为什么我在命令中使用“-use_wallclock_as_timestamps 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)会产生相同的结果。
你知道我怎样才能让我的小偷像“定格乐高”一样走路以将文件大小降至最低吗?
谢谢你的帮助
最佳答案
您的限制文件大小是多少? 2.6MB 60 秒的视频对我来说似乎很合理,大约 350kbps,这对于视频质量来说相当低。
您需要指定视频码率-b:v 125000
(125kbps,应该让你降到大约 900kb)来控制你希望视频编码的比特率。您没有为 FFMpeg 提供足够的提示来说明您希望如何处理视频,因此它会选择您不喜欢的任意值。当您降低帧速率时,它只是用尽了为每个帧分配更多位的缓冲区。 (您需要记住的一件大事是,当您将视频拉伸(stretch)到更长的时间段时,场景发生显着变化的可能性越大,需要 I 帧(完整编码帧与基于前一帧的帧),因此减少帧速率会有所帮助,但可能没有您想象的那么大帮助)。
您的“(它在第一帧被阻止)。”很可能是您尝试在流不在 I 帧时开始解码流的问题,而不是您的设置问题。
关于ffmpeg 故意丢帧以降低文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26449063/
首先是我的对象: public class Group { private final ObservableList sourceList; private final Obser
我有一个 Circle 类和一个 Rectangle 类。我现在想创建一个类 FunnyObject,每个类都由一个圆和两个矩形组成。 如果我这样做: class FunnyObject:public
我正在阅读一篇博文 here关于用 node.js 创建一个刮板并遇到了一些有趣的 javascript,我无法完全理解。这正是我想在我的脚本中使用的东西,但作为一个新手,我不想在不知道它们首先做什么
我不明白为什么在成功之后我为什么看不到脚本中的错误(我用谷歌搜索,它只是给出了关于jquery get脚本成功/错误时错误处理的很多答案)。 如果我使用“any” js脚本执行此操作 $.getScr
我目前正在为我公司正在开发的设备( radio 编码器)开发单元测试。 可以通过 SNMP(仅限 v1)访问各种统计信息,其中您可以获得由于各种原因丢弃的 UDP 数据报的数量。 我希望能够发送一个包
这是一个令人费解的问题。我运行良好的 ASP.NET 3.5 应用程序突然开始出现超时错误... System.Data.SqlClient.SqlException:超时已过。操作完成前超时时间已过
我正在尝试掌握 C++ 内存管理的窍门,并尝试使用无限循环的新语句故意使我的程序崩溃。据我了解,这只会在内存堆上保留越来越多的空间。但是我的程序不会崩溃。在 Windows 任务管理器中监控它,它将使
我是一名优秀的程序员,十分优秀!