如何在不重新编码的情况下修正MJPEG AVI文件的帧率(fps)与时长信息
解决MJPEG AVI文件时长显示错误的无损方法
遇到这种元数据标注帧率和实际录制帧率不匹配导致时长显示偏差的问题,完全可以用ffmpeg在不重新编码、不损失画质的前提下修正,核心思路是调整容器的帧率元数据,让系统根据总帧数计算出正确的时长。
步骤1:获取视频总帧数
首先得确定视频的总帧数,这是计算正确帧率的关键。打开终端/命令提示符,运行以下命令:
ffmpeg -i input.avi -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1
把input.avi换成你的目标文件名,执行后会输出一个数字,这就是视频的总帧数(记为N)。
步骤2:计算正确的帧率
假设你已知真实录制时长为T秒(比如12分钟就换算成720秒),那么正确的帧率F计算公式是:
F = N / T
举个例子:如果总帧数是15000,真实时长720秒,那么F = 15000 / 720 ≈ 20.8333。
步骤3:无损修改帧率元数据
用ffmpeg直接复制原视频/音频流,同时设置正确的帧率,命令如下:
ffmpeg -i input.avi -c:v copy -r 20.8333 -c:a copy corrected.avi
-c:v copy:直接复制视频流,不重新编码,既保证画质无损又能让处理速度极快-r 20.8333:替换成你计算出的正确帧率数值-c:a copy:复制音频流(如果文件没有音频可以去掉这个参数)corrected.avi是修正后的输出文件名
额外注意事项
- 操作前务必备份原文件,避免意外情况导致文件损坏
- 帧率可以保留多位小数,确保计算出的时长足够准确
- 整个过程只修改容器的元数据,大文件也能在几秒内完成处理
内容的提问来源于stack exchange,提问作者Celongar
相关产品推荐
相关产品推荐

