ffmpeg - 使用 FFmpeg 删除重复帧
问题描述
我有一个 mp4 文件 samp1.mp4,它有重复的帧,我尝试使用 mpdecimate 删除它们。我使用的 FFmpeg 命令行是
ffmpeg -i samp1.mp4 -vf mpdecimate out3.mp4 > out3.txt 2>&1
但是输出文件 out3.mp4 仍然有重复的帧。
该命令生成文本:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'samp1.mp4':
Metadata:
major_brand : M4V
minor_version : 1
compatible_brands: M4V mp42isom
creation_time : 2018-12-26T20:38:35.000000Z
Duration: 00:00:04.77, start: 0.000000, bitrate: 4495 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 4476 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
creation_time : 2018-12-26T20:38:35.000000Z
handler_name : Mainconcept MP4 Video Media Handler
encoder : AVC Coding
Output #0, mp4, to 'out3.mp4':
Metadata:
major_brand : M4V
minor_version : 1
compatible_brands: M4V mp42isom
encoder : Lavf58.25.100
Stream #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720, q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
Metadata:
creation_time : 2018-12-26T20:38:35.000000Z
handler_name : Mainconcept MP4 Video Media Handler
encoder : Lavc58.42.104 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame= 57 fps=0.0 q=29.0 size= 0kB time=00:00:00.13 bitrate= 2.9kbits/s dup=35 drop=0 speed=0.262x
frame= 87 fps= 75 q=29.0 size= 256kB time=00:00:01.13 bitrate=1848.9kbits/s dup=56 drop=0 speed=0.978x
frame= 117 fps= 65 q=29.0 size= 256kB time=00:00:02.13 bitrate= 982.2kbits/s dup=74 drop=0 speed=1.19x
frame= 142 fps= 62 q=29.0 size= 256kB time=00:00:02.96 bitrate= 706.3kbits/s dup=88 drop=0 speed=1.29x
frame= 142 fps= 47 q=-1.0 Lsize= 720kB time=00:00:04.63 bitrate=1271.0kbits/s dup=88 drop=0 speed=1.52x
=================== 最后五行输出很有趣。第一行
frame= 57 fps=0.0 q=29.0 size= 0kB time=00:00:00.13 bitrate= 2.9kbits/s dup=35 drop=0 speed=0.262x
似乎说第 57 帧是重复的,现在找到的重复总数 = 35,丢弃的总帧数为 0。
1)这是正确的,2)为什么没有任何帧被丢弃在任何行上,以及 3)为什么输出文件仍然包含重复项?
谢谢你的帮助。
解决方案
默认情况下,MP4 是 ffmpeg 中的恒定帧速率复用器,因此由 mpdecimate 创建的时间戳间隙将通过重复帧重新插入。
解决方法是设置可变帧率模式。
ffmpeg -i samp1.mp4 -vf mpdecimate -vsync vfr out3.mp4 > out3.txt 2>&1
推荐阅读
- asp.net-core - 如何在 ASP .NET Core 中更改 SignOutAsync ReturnUrl
- javascript - 页面不断滚动到外部 javascript
- postgresql - 如何根据 PostgreSQL 中的“where room="living" 和 garden="green" 等条件“插入或更新”
- math - 计算坐标系中盒子的封闭垂直俯仰角
- selenium - 在浏览器中使用 Selenium
- asp.net - 一种在 Episerver 中具有未提交给 git 的本地配置覆盖的方法
- sql - 如何通过关联多个其他节点来查找节点
- powershell - Azure DevOps 托管代理管道“无法找到可执行文件:‘Powershell’
- javascript - 使用导入和参数运行自定义函数
- ios - 通过 Wi-Fi 连接到物理设备时禁用 Wi-Fi 辅助