ffmpeg 从视频中提取帧时间戳

The*_*4kj 3 video ffmpeg

我正在使用这个在我的 Android 应用程序中使用 FFmpeg。我正在从视频中提取帧,然后将它们添加到裁剪查看器中。所以每一帧都需要代表视频中的某个时间帧。这是我当前用于提取帧的 ffmpeg 代码:

ffmpeg -i inputFile -f image2 -ss mySS -r myR frame-%05d.png

使用上述命令时,如何为每一帧添加时间戳?所以我知道例如第 5 帧在视频中的 9 秒处。

我不知道我使用的 ffmpeg 库是否有来自此链接的ffprobe 。我还查看了 stackoverflow 上的其他链接

任何帮助表示赞赏

Gya*_*yan 8

要刻录视频中的时间戳:

ffmpeg -i inputFile -vf drawtext=fontfile='/path/to/font':fontcolor=white:fontsize=25:x=(w-tw)/2:y=h-th-10:text='Source time: %{pts}' -ss mySS -r myR frame-%05d.png
Run Code Online (Sandbox Code Playgroud)

如果您有 2017 年 11 月 13 日版本的 FFmpeg,您可以运行

ffmpeg -i inputFile -f image2 -vf select='gte(t,mySS)' -vsync 0 -frame_pts 1 frame-%05d.png
Run Code Online (Sandbox Code Playgroud)

这将使用源帧索引对输出帧进行编号。

如果您无法升级 FFmpeg,那么还有一个更长的解决方法。

跑步

ffmpeg -i inputFile -f image2 -vf select='gte(t,mySS)',showinfo -vsync 0 frame-%05d.png 2> log.txt
Run Code Online (Sandbox Code Playgroud)

这会将控制台重定向到文本文件。在其中,您将看到这样的行:

...
     Metadata:
      encoder         : Lavc58.1.100 wrapped_avframe
[Parsed_showinfo_1 @ 00000000056d9dc0] n:   0 pts:  38400 pts_time:3       pos:   105928 fmt:yuv420p sar:1/1 s:320x240 i:P iskey:0 type:B checksum:F6027584 plane_checksum:[FAA4D7FC 4748A9ED 4767F37D] mean:[123 129 126] stdev:[57.1 78.2 80.6]
[Parsed_showinfo_1 @ 00000000056d9dc0] n:   1 pts:  38912 pts_time:3.04    pos:   101527 fmt:yuv420p sar:1/1 s:320x240 i:P iskey:0 type:P checksum:ECBC791A plane_checksum:[4104BBD1 4805B985 542303B5] mean:[123 129 126] stdev:[57.1 78.1 80.5]
[Parsed_showinfo_1 @ 00000000056d9dc0] n:   2 pts:  39424 pts_time:3.08    pos:   108798 fmt:yuv420p sar:1/1 s:320x240 i:P iskey:0 type:B checksum:70B2AC23 plane_checksum:[EF78A2F1 946CDA4F 39B72ED4] mean:[123 129 127] stdev:[57.1 77.8 80.1]
...
Run Code Online (Sandbox Code Playgroud)

您可以解析并提取 pts_time 值,该值与生成的图像具有 1:1 对应关系。


hoo*_*o-b 5

frame_pts option 是您的朋友...将其设置为 true,ffmpeg 将输出帧的演示时间戳作为您的文件名。

ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png
Run Code Online (Sandbox Code Playgroud)

积分归于这个超级用户答案.. 混合帧率-r选项的更多解释frame_pts