使用 FFmpeg 进行可变帧率

使用 FFmpeg 进行可变帧率

假设我有 5 张图像,每张图像之间有相应的延迟:

  1. 60毫秒;
  2. 54毫秒;
  3. 70毫秒;
  4. 23毫秒;
  5. 40毫秒;

我怎样才能得知FFmpeg这些信息?

答案1

除了显示的多种工具方法外https://stackoverflow.com/q/28086775/5726027,也可以通过单个长命令完成。

ffmpeg -i a1.jpg -i a2.jpg -i a3.jpg -i a4.jpg -i a5.jpg
       -filter_complex
        "[1]settb=1/1000,setpts=PTS+0.06/TB[b];
         [2]settb=1/1000,setpts=PTS+0.054/TB[c];
         [3]settb=1/1000,setpts=PTS+0.07/TB[d];
         [4]split[4a][4b];
         [4a]settb=1/1000,setpts=PTS+0.023/TB[e];
         [4b]settb=1/1000,setpts=PTS+0.04/TB[f];
         [0][b][c][d][e][f]concat=n=6"
       -vsync vfr -r 1000 -video_track_timescale 1000 vt.mp4

对于除第一幅图像之外的每一幅图像,都会应用时基和时间戳过滤器。由于您需要毫秒级的精度,因此将时基设置为 1/1000 秒 = 1 毫秒。然后 setpts 添加所需的延迟(以秒为单位)。由于我相信视频的最后一帧实际上具有由编解码器帧速率确定的默认持续时间,因此必须复制最后一幅图像。第一个副本根据其延迟设置 PTS 值,第二个副本的 PTS 设置为最后一幅图像的预期持续时间。

答案2

我最终使用了该-concat选项。它基本上是一个文本文件,其中包含每个输入图像的名称和持续时间。

相关内容