如何使用 ffmpeg 获取给定时间戳的帧号

Bar*_*osz 1 video ffmpeg video-processing

如何使用 ffmpeg 获取最接近给定时间(相对于视频开头)的帧号?视频具有可变帧速率。我不需要任何其他元数据或实际帧(图像)本身。速度比精度更重要(除非可能的误差超过几秒)。

例子:

输入

  • video.mp4(为简单起见,假设理想恒定 30 fps)
  • 00:00:05(时:分:秒)

输出

  • 150

Dou*_*ars 5

ffmpeg -t 01:05 -i input.mp4 -nostats -vcodec copy -y -f rawvideo /dev/null 2>&1  |\
   grep frame |\
   awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

ffmpeg命令获取您的input.mp4,将其截断为 -t (在上面的示例中 01:05 ),并将文件写入/dev/null。覆盖/dev/null-y上的所有内容。

grep命令获取帧数,​​awk为您提供该行的第二个“单词”(以空格分隔)。

输入:
ffmpeg -t 01:05 -i baywatch.mp4 -nostats -vcodec copy -y -f rawvideo /dev/null 2>&1 | grep frame | awk '{print $2}'

输出:
1559