如何在增加视频帧率的同时减少视频持续时间?

How to increase video framerate while simultaneously decreasing the video duration?

我有一个 fps 为 30 的视频文件,但视频播放器(例如 VLC)将 fps 读取为 25(我不知道为什么!)。这会导致实际视频持续时间与视频播放器显示的内容不匹配。例如,开始帧和结束帧(见附图)顶部中心显示的视频时间戳之间的时间差为 12 分 36 秒,但视频播放器显示的视频持续时间为 15 分 7 秒(见两张图片的右下角)。我认为视频播放器将原始视频时长乘以 1.2 (30/25)。

我尝试使用 ffmpeg 将 fps 更改为 30 使用:

ffmpeg -i input.mp4 -filter:v fps=30 output.mp4

但是 ffmpeg doc on changing frame rate 表示“视频的输​​出持续时间将保持不变。

我需要对代码进行哪些更改才能使播放器中显示的视频时长与实际视频时长相符?

起始帧:

结束帧:

如果问题是文件中存储的帧率 (25 fps) 不正确(vlc 报告文件告诉它的内容),您可以尝试:

ffmpeg -r 30 -i input.mp4 [-c copy] output.mp4
  • 指定-r 30 输入选项覆盖文件指定的帧率。
  • 首先尝试使用 -c copy(无括号),看看是否可以复制编码数据。如果它不起作用,请将其删除并 re-encode 视频流。