我需要连接多个具有不同帧速率的视频文件,以便使用 Raspberry PI 上的 OMXPlayer 播放它们(连接也是在 PI 上完成的)。
原始文件和拼接文件都是 mp4/h264,原始文件也是由我的一些软件创建的。
当文件具有不同的时间基准时,使用 ffmpegs 复制复用器不起作用。
所以我在想,我制作的原创视频带有一种明确的时间基准120(120 可以被 25 和 30 整除,这是我唯一关心的帧速率)。
考试
ffmpeg.exe -i .\ballon.mp4 -enc_time_base 1:120 .\ballon-120.mp4
看起来很有希望:ffmpeg 表示它可以生成 30fps 的视频(原始视频为 30fps),输出时间基准为 120。
但是,它还说它“重复帧”很多,并且以下命令告诉我我拥有的帧数是实际应该拥有的帧数的 4 倍:
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 .\ballon.mp4
ffprobe 也认为帧速率现在是 120,而 OMXPlayer 确实抱怨帧速率太高并且播放视频有点慢。
我想要的是更改时间基准,而不是帧速率或帧数。我该怎么做?
答案1
使用私有 MP4 复用器选项
ffmpeg.exe -i .\ballon.mp4 -c copy -video_track_timescale 120 .\ballon-120.mp4
按照你的命令,重新编码视频并向编码器提供时间基准,ffmpeg 使用该时间基准进行帧复制/丢弃决策。
答案2
关键是使用vsync
如下选项:
ffmpeg.exe -i .\ballon.mp4 -enc_time_base 1:120 -vsync vfr .\ballon-120.mp4