我正在使用此库将FFMPEG与我的Android应用程序一起使用。我正在从视频中提取框架,然后将它们添加到农作物观众中。因此,每个帧需要表示视频中的一定时间范围。这是我当前提取帧的FFMPEG代码:
ffmpeg -i inputFile -f image2 -ss mySS -r myR frame-%05d.png
使用上述命令时,我将如何在每个帧中添加时间戳?所以我知道例如帧5在视频中的9s。
我不知道我正在使用的ffmpeg lib是否有来自此链接的ffprobe。我还查看了Stackoverflow上的其他链接
任何帮助都将受到赞赏
frame_pts
选项是您的朋友...将其设置为true,FFMPEG将输出框架的显示时间戳为您的文件名。
ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png
信用转到这个超级用户答案。.与frame_pts
-r
选项的更多说明燃烧视频中的时间戳:
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
如果您有2017年11月13日的FFMPEG构建,则可以运行
ffmpeg -i inputFile -f image2 -vf select='gte(t,mySS)' -vsync 0 -frame_pts 1 frame-%05d.png
这将用源框架索引编号输出帧。
如果您不能升级FFMPEG,则有更长的解决方法。
运行
ffmpeg -i inputFile -f image2 -vf select='gte(t,mySS)',showinfo -vsync 0 frame-%05d.png 2> log.txt
这将将控制台重定向到文本文件。在其中,您将以这样的方式排列:
...
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]
...
您可以解析并提取PTS_Time值,该值与生成的图像具有1:1的对应关系。