![ffmpeg:如何从流中选择特定模式的帧?](https://linux22.com/image/1533186/ffmpeg%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BB%8E%E6%B5%81%E4%B8%AD%E9%80%89%E6%8B%A9%E7%89%B9%E5%AE%9A%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%B8%A7%EF%BC%9F.png)
有人能帮我将 30 fps 的视频流转换为 24 fps 吗?
原始材料是一部电影。它似乎是以 24 fps 拍摄的,因为流似乎由一系列 4 帧组成,后面跟着一个重复,然后再重复一遍。4 帧,1 个重复,4 帧,1 个重复,4 帧,1 个重复,等等,每秒有 24 帧,每秒有 6 个重复。
当我要求 ffmpeg 将该素材转换为 24 fps 时,发生了奇怪的事情。
当我将 20 秒的剪辑 3 分钟转换为电影,并以 24 fps 的速度转换为 mpeg2video(使用标志 -r 24)时,我得到了一部流畅的电影,除了前几帧是重复的。但是,当我第一次尝试将同一剪辑复制到单独的文件中,然后尝试将其转换为 mpeg2video 时,我得到了几个帧的断断续续的运动,然后是一个重复的帧,然后是更多的帧,一个重复的帧等等,重复帧之间的帧数似乎是随机的。所以 - 同一个剪辑,但在第一种情况下是流畅的,在第二种情况下是断断续续的!
但是,当我使用 ffmpeg 将完全相同的文件转换为 x264 时,我得到了大约 30 帧的相同断奏运动,然后运动变得完全流畅!
这里可能发生什么事?
是否有某种方法可以具体告诉 ffmpeg 仅使用 4 帧,然后跳过一帧,并在整个电影中循环播放?
谢谢。
答案1
有一个具体的问题,您可以使用选择过滤器,或者有一个一般的问题,即删除在电视电影处理过程中引入的未知模式中存在的重复帧。
对于前者,
ffmpeg -i in.mp4 -vf select='mod(n+1,5)',setpts=N/24/TB out.mp4
对于后者,抽取过滤器可能有用
ffmpeg -i in.mp4 -vf mpdecimate,setpts=N/24/TB out.mp4