Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ffmpeg从视频中提取帧时间戳_Android_Video_Ffmpeg_Android Ffmpeg - Fatal编程技术网

Android ffmpeg从视频中提取帧时间戳

Android ffmpeg从视频中提取帧时间戳,android,video,ffmpeg,android-ffmpeg,Android,Video,Ffmpeg,Android Ffmpeg,我用它来在我的Android应用程序中使用FFmpeg。我正在从视频中提取帧,然后将它们添加到裁剪查看器中。因此,每一帧都需要表示视频中的某个时间帧。以下是我当前用于提取帧的ffmpeg代码: ffmpeg-i输入文件-f image2-ss mySS-r myR帧-%05d.png 当使用上述命令时,如何向每个帧添加时间戳?所以我知道,例如,第5帧在视频中是9秒 我不知道我使用的ffmpeg库是否有来自此的ffprobe。我还查看了stackoverflow上的其他链接 要刻录视频中的时间戳,

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

ffmpeg-i输入文件-f image2-ss mySS-r myR帧-%05d.png

当使用上述命令时,如何向每个帧添加时间戳?所以我知道,例如,第5帧在视频中是9秒

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


要刻录视频中的时间戳,请提供任何帮助:

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
如果您的FFmpeg版本>2017年11月13日,则可以运行

ffmpeg -i inputFile -f image2 -vf select='gte(t,mySS)' -vsync 0 -frame_pts 1 frame-%05d.png
这将使用源帧索引对输出帧进行编号

如果您不能升级FFmpeg,那么还有更长的解决方法

这将把控制台重定向到文本文件。在其中,您将看到以下行:

...
     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_时间值,这些值与生成的图像具有1:1的对应关系。

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

ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png

功劳归于此。。更多关于混合帧速率
-r
选项和
帧\u pts

的说明您想要在文件名或图像中显示信息吗?我不介意,只要它很快,我可以将每个时间帧放入一个变量中。非常感谢。有人能帮忙吗?我绝对不能使用第二个命令,因为我认为libs版本是v3.0.1。此外,我不想在图像上的时间框架,我需要分配给一个变量。如果我可以将每个帧的文件名命名为视频中帧的时间,或者以任何其他方式将它们放入变量中,这将非常方便。谢谢你能帮我在评论中更新问题吗?谢谢:)
ffmpeg -skip_frame nokey -i file -vsync 0 -frame_pts true out%d.png