如何使用 FFmpeg 从视频中 cut/drop 特定未解码的 h.264(关键)帧?
How can I cut/drop specific undecoded h.264 (Key-)frames from a video using FFmpeg?
我想通过删除关键帧来故意“破坏”视频,因此以下 P 帧引用了错误的关键帧。这也称为 Datamoshing,虽然已经有工具可以帮我做到这一点,但我想自己编程。
据我了解,我最好的尝试是使用比特流过滤,
但这不起作用:
ffmpeg -i Input.mp4 -c copy -bsf:v noise=drop='gt(t\,30)*key' output.mp4
它确实适用于 not(key)
如果我能够将视频拆分成未解码的帧,那就更好了。
然后能够将其重新组合成缺少特定帧或添加其他帧的视频。
对于这个方法我只找到了这个:
ffmpeg -i input.h264 -c:v libx264 -filter:v "select=gte(n\,25)" -frames:v 1 -f h264 frame.h264
但它一次只处理一帧,我不知道它是否真的保留了它的帧类型,因为(如果我错了请纠正我)它是用这个命令去解码和编码的。
任何帮助表示赞赏!甚至完全不同的方法。
对不起,我错了。我没有添加 t
作为直接变量。使用 pts*tb
代替。
ffmpeg -i Input.mp4 -c copy -bsf:v noise=drop='gt(pts/tb\,30)*key' output.mp4
我想通过删除关键帧来故意“破坏”视频,因此以下 P 帧引用了错误的关键帧。这也称为 Datamoshing,虽然已经有工具可以帮我做到这一点,但我想自己编程。
据我了解,我最好的尝试是使用比特流过滤,
但这不起作用:
ffmpeg -i Input.mp4 -c copy -bsf:v noise=drop='gt(t\,30)*key' output.mp4
它确实适用于 not(key)
如果我能够将视频拆分成未解码的帧,那就更好了。
然后能够将其重新组合成缺少特定帧或添加其他帧的视频。
对于这个方法我只找到了这个:
ffmpeg -i input.h264 -c:v libx264 -filter:v "select=gte(n\,25)" -frames:v 1 -f h264 frame.h264
但它一次只处理一帧,我不知道它是否真的保留了它的帧类型,因为(如果我错了请纠正我)它是用这个命令去解码和编码的。 任何帮助表示赞赏!甚至完全不同的方法。
对不起,我错了。我没有添加 t
作为直接变量。使用 pts*tb
代替。
ffmpeg -i Input.mp4 -c copy -bsf:v noise=drop='gt(pts/tb\,30)*key' output.mp4