如何获取使用ffmpeg提取的图像的时间戳

时间:2014-03-20 11:23:35

标签: ffmpeg

如何获取使用ffmpeg获取的提取图像的时间戳?将什么选项传递给ffmpeg命令?
我正在使用的当前命令是:

ffmpeg -i video.mp4 -vf select='gt(scene\,0.3)' -vsync 0 -an keyframes%03d.jpg

4 个答案:

答案 0 :(得分:1)

选项可以是使用drawtext video filter直接在每个帧上写入时间戳。

在Windows机器上,使用Zeranoe ffmpeg软件包,您可以输入:

ffmpeg -i video.mp4 -vf "drawtext=fontfile=/Windows/Fonts/Arial.ttf: timecode='00\:00\:00\:00': r=25: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1: fontsize=30" tmp/frame%05d.jpg" -vsync 0 -an keyframes%03d.jpg

该命令将在每帧的下半部分转储帧时间戳,并以秒分辨率。

请查看here以获取有关如何为ffmpeg设置字体环境变量的信息。

答案 1 :(得分:0)

在场景变化时提取帧并获取特定帧的时间。可能会对以下行有所帮助:

ffmpeg -i image.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -vsync 0 frames%05d.jpg >& output.txt

您将获得如下输出:[Parsed_showinfo_1 @ 0x25bf900] n:0分:119357 pts_time:9.95637 pos:676702 .....你需要按照命令提取该运行的pts_time。

grep showinfo ffout | grep pts_time:[0-9.]* -o | grep '[0-9]*\.[0-9]*' -o > timestamps

使用上述命令,您将找到以下内容:

9.95637
9.98974
15.0281
21.8016
28.208
28.4082

答案 2 :(得分:0)

由于这个问题是在python中标记的,因此我想为Python开发人员添加以下解决方案:

from subprocess import check_output
import re
pts = str(check_output('ffmpeg -i video.mp4 -vf select="eq(pict_type\,I)" -an -vsync 0  keyframes%03d.jpg -loglevel debug 2>&1 |findstr select:1  ',shell=True),'utf-8')  #replace findstr with grep on Linux
pts = [float(i) for i in re.findall(r"\bpts:(\d+\.\d)", pts)] # Find pattern that starts with "pts:"
print(pts)

答案 3 :(得分:0)

@DeWil 的回答的一个小更新(抱歉无法评论,因为我没有足够的声誉)。 下面的答案通过与时间戳“t:”而不是“pts:”的正则表达式匹配来给出适当的时间戳。

from subprocess import check_output
import re
pts = str(check_output('ffmpeg -i input.mp4 -vf select="eq(pict_type\,I)" -an -vsync 0  keyframes%03d.jpg -loglevel debug 2>&1 |findstr select:1  ',shell=True),'utf-8')  #replace findstr with grep on Linux
pts = [float(i) for i in re.findall(r"\bt:(\d+\.\d)", pts)] # Find pattern that starts with "t:"
print(pts)