我设法修复了我的文件。我找到了mpdecimate
过滤器,它从视频流中删除了重复或接近重复的帧。首先我试过:
ffmpeg -loglevel debug -i orig.mp4 -an -vf "mpdecimate" test.mp4
我-loglevel debug
在转码过程中添加了更多信息。信息显示mpdecimate
了框架的作用,这是很多很多这种模式:
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:44032 pts_time:3.44 drop_count:1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:44544 pts_time:3.48 drop_count:2
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:45056 pts_time:3.52 drop_count:3
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:45568 pts_time:3.56 drop_count:4
781>=hi keep pts:46080 pts_time:3.6 drop_count:-1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:46592 pts_time:3.64 drop_count:1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:47104 pts_time:3.68 drop_count:2
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:47616 pts_time:3.72 drop_count:3
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:48128 pts_time:3.76 drop_count:4
821>=hi keep pts:48640 pts_time:3.8 drop_count:-1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:49152 pts_time:3.84 drop_count:1
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:49664 pts_time:3.88 drop_count:2
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:50176 pts_time:3.92 drop_count:3
lo:0<217 lo:0<-2147483648 lo:0<-2147483648 drop pts:50688 pts_time:3.96 drop_count:4
793>=hi keep pts:51200 pts_time:4 drop_count:-1
也就是说,它一直连续丢失4帧作为重复,并保持每5秒。这表明原始帧率是现在的1/5。我很幸运!由于视频的当前25 fps是原始帧速率的倍数,因此保持和丢弃帧的时间错位不应该存在问题。因此,我重新编码原始视频没有比这更复杂-vf "fps=5"
,输出似乎没问题。为了确保,我通过mpdecimate
过滤器输出了输出,并将所有剩余的帧检测为“保持”。所以原始文件并没有像我想象的那么混乱。