hackergame2019-writeups
hackergame2019-writeups copied to clipboard
三教奇妙夜ffmpeg
ffmpeg -i output.mp4 -vf "select='if(gt(scene,0.01),st(1,t),lte(t-ld(1),1))',setpts=N/FRAME_RATE/TB" out2.mp4
(我不会ffmpeg,这个是百度的如何去除重复帧的。。
我会全ffmpeg做法!使用blackframe的filter!然后在输出中找到具体时间,在ffplay -ss跳转过去就可以了!(具体代码等我吃完饭再补吧)
我也是这么解的。
参考:https://stackoverflow.com/questions/40966394/how-to-simply-remove-duplicate-frames-from-a-video-using-ffmpeg
只要选择gt(scene,0.3)这一个参数就能找出来了
我用的ffmpeg-python,提取所有 某个像素是黑的 的帧 (代码太丑不想贴了)
(上次发言中误将blackframe写成blackdetect了,现已改正)
ffmpeg -i output.mp4 -vf blackframe why_output.mp4
输出基本如下
[Parsed_blackframe_0 @ 0x55d873a3f580] frame:1499 pblack:98 pts:767488 t:59.960000 type:I last_keyframe:1499
[Parsed_blackframe_0 @ 0x55d873a3f580] frame:1500 pblack:98 pts:768000 t:60.000000 type:P last_keyframe:1499
[Parsed_blackframe_0 @ 0x55d873a3f580] frame:4575 pblack:98 pts:2342400 t:183.000000 type:I last_keyframe:4575
(下略)
然后ffplay -ss 58
这样看一看就好了吧。
我发现我这样的速度比删除重复帧的要快一倍多(测试环境:5.2.14-arch2-1-ARCH
ffmpeg version n4.2.1
),虽然后面还要人工查看个几秒的视频……
ffmpeg -i output.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -f null - 2>&1 知乎搜索 ffmpeg视频抽帧那些事
ffmpeg -i output.mp4 -vf mpdecimate,setpts=N/FRAME_RATE/TB -f image2 keyframe-%02d.jpg
会生成13张图片,我这大约耗时2min,手动删去第奇数张即可,剩余6张flag
抱歉😂 忘了在哪看来的 mpdecimate 方法了