Saya berhasil memperbaiki file saya. Saya menemukan mpdecimate
filter, yang menjatuhkan bingkai duplikat atau dekat duplikat dari aliran video. Pertama saya mencoba:
ffmpeg -loglevel debug -i orig.mp4 -an -vf "mpdecimate" test.mp4
Saya menambahkan -loglevel debug
untuk mendapatkan lebih banyak info selama transcoding. Info menunjukkan apa mpdecimate
yang dilakukan dengan bingkai, yang banyak dan banyak dari pola ini:
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
Yaitu, itu secara konsisten menjatuhkan 4 frame berturut-turut sebagai duplikat dan menjaga setiap 5. Ini menunjukkan bahwa frame rate asli adalah 1/5 dari apa yang sekarang. Saya beruntung! Karena video 25 fps saat ini adalah kelipatan dari frame rate asli, seharusnya tidak ada masalah dengan misalignment temporal dari frame yang disimpan dan dijatuhkan. Karena itu saya mentranskode ulang video asli dengan tidak lebih rumit dari itu -vf "fps=5"
, dan hasilnya tampak baik-baik saja. Hanya untuk memastikan, saya menyalurkan output melalui mpdecimate
filter, dan mendeteksi semua frame yang tersisa sebagai "keep". Jadi file aslinya tidak begitu kacau seperti yang saya kira.