You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派视频录制:AVI帧率异常及防中断MP4录制方案咨询

解决方案:树莓派Bullseye下防中断视频录制及AVI帧率问题修复

一、修复AVI文件帧率识别错误问题

你遇到的AVI被识别为600fps的问题,是因为libcamera-vid通过libav封装AVI时未正确写入帧率元数据,可通过以下两种方式解决:

1. 录制时强制指定libav帧率参数

修改原命令,添加--libav-opt参数强制设置输出帧率,让libav在封装时写入正确的元数据:

libcamera-vid -t $filmDuration --framerate 5 --width 500 --height 375 --nopreview --codec libav --libav-format avi --libav-opt "r=5" -o "$(date +%Y%m%d_%H%M.avi)" --tuning-file /usr/share/libcamera/ipa/raspberrypi/imx219_noir.json

2. 事后用ffmpeg修正已有AVI文件

如果已经生成错误帧率的AVI文件,可直接用ffmpeg重新封装并修正帧率(无需重新编码,速度极快):

ffmpeg -i input.avi -r 5 -c:v copy -c:a copy fixed_output.avi

二、防中断的MP4录制方案

MP4文件损坏的核心原因是其索引表(moov atom)默认在文件末尾写入,中断时索引未完成。以下两种方案可实现可靠的防中断MP4录制:

1. 实时写入MP4索引(推荐)

用libcamera-vid输出H.264裸流,通过管道传给ffmpeg,让ffmpeg实时将索引写入文件头部,同时开启实时磁盘刷新:

libcamera-vid -t $filmDuration --framerate 5 --width 500 --height 375 --nopreview --codec h264 --output - --tuning-file /usr/share/libcamera/ipa/raspberrypi/imx219_noir.json | ffmpeg -f h264 -r 5 -i - -c:v copy -movflags +faststart+flush_packets -f mp4 "$(date +%Y%m%d_%H%M.mp4)"
  • movflags=+faststart:将MP4索引放在文件开头,即使录制中断,已生成的部分也能正常播放和被OpenCV识别
  • flush_packets:确保数据实时写入磁盘,避免缓存未刷新导致的内容丢失

2. 分段录制+事后合并

若担心管道稳定性,可采用分段录制,每段生成独立的可播放MP4文件,事后合并:

录制命令:

libcamera-vid -t $filmDuration --framerate 5 --width 500 --height 375 --nopreview --codec libav --libav-format mp4 --segment 300 -o "$(date +%Y%m%d_%H%M)_%03d.mp4" --tuning-file /usr/share/libcamera/ipa/raspberrypi/imx219_noir.json

--segment 300表示每300秒(5分钟)生成一个分段文件,即使录制中断,仅最后一段可能损坏,之前的分段均正常可用。

合并命令:

先创建包含所有分段的文件列表:

ls $(date +%Y%m%d_%H%M)_*.mp4 | sort > filelist.txt

再用ffmpeg合并所有分段:

ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_output.mp4

内容的提问来源于stack exchange,提问作者Shovel_jockey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:15:47