ffmpeg 获取当前帧的时间
时间: 2023-06-29 10:12:29 浏览: 396
您可以使用下面的命令来获取当前帧的时间:
```
ffmpeg -i input.mp4 -vf "select=gte(n\,100)*printf('time=%{pts\\:hms}\n', PTS)" -vframes 1 -f null -
```
这个命令会输出视频文件 `input.mp4` 的第 100 帧的时间。其中:
- `-vf "select=gte(n\,100)*printf('time=%{pts\\:hms}\n', PTS)"` 表示使用 `select` 滤镜选择第 100 帧,并使用 `printf` 函数输出当前帧的时间戳,格式为 `time=时:分:秒.毫秒`。
- `-vframes 1` 表示只输出一帧。
- `-f null` 表示输出到 null 设备,即不输出到文件或屏幕上。
- `-` 表示输出的设备是标准输出,即输出到控制台上。
这个命令会输出类似于 `time=00:00:04.040000` 的时间戳,表示第 100 帧的时间是 4 秒零 40 毫秒。您可以根据需要修改 `-vf` 参数中的帧数 `100` 来输出其他帧的时间戳。
相关问题
ffmpeg 获取全部帧 并显示时间
您可以使用以下命令来获取视频中的所有帧并显示每一帧的时间:
```
ffmpeg -i input.mp4 -vf "setpts=PTS-STARTPTS,select=gt(scene\,0),showinfo" -f null -
```
这个命令将会输出视频文件 `input.mp4` 中的所有帧,并使用 `showinfo` 滤镜显示每一帧的时间戳。其中:
- `-vf "setpts=PTS-STARTPTS,select=gt(scene\,0),showinfo"` 表示使用 `setpts` 滤镜将时间戳从相对时间转换为绝对时间,使用 `select` 滤镜选择所有非黑色帧(即选择有变化的帧),并使用 `showinfo` 滤镜显示每一帧的时间戳。
- `-f null` 表示输出到 null 设备,即不输出到文件或屏幕上。
- `-` 表示输出的设备是标准输出,即输出到控制台上。
这个命令会输出类似于以下的信息:
```
[Parsed_showinfo_1 @ 0x7f9c5a600840] n: 0 pts: 0 pts_time:0 pos: 1826994 fmt:yuv420p sar:1/1 s:1920x1080 i:P iskey:1 type:I checksum:4EA7BC6F plane_checksum:[A5B09F9A A62D7B7D 3BEC2BD7] mean:[98 128 128] stdev:[51.9 12.0 12.0]
[Parsed_showinfo_1 @ 0x7f9c5a600840] n: 1 pts: 4000 pts_time:0.04 pos: 1833187 fmt:yuv420p sar:1/1 s:1920x1080 i:P iskey:0 type:P checksum:3F4F9A6A plane_checksum:[9D4D3E2E 7C7F7F23 8D2C9D2B] mean:[98 128 128] stdev:[51.9 12.0 12.0]
[Parsed_showinfo_1 @ 0x7f9c5a600840] n: 2 pts: 8000 pts_time:0.08 pos: 1841318 fmt:yuv420p sar:1/1 s:1920x1080 i:P iskey:0 type:P checksum:3F9DC4DE plane_checksum:[A8B8E3A8 7C7F7F23 8D2C9D2B] mean:[98 128 128] stdev:[51.8 12.0 12.0]
...
```
其中 `n` 表示当前帧的序号,`pts` 表示当前帧的时间戳,`pts_time` 表示当前帧的时间戳转换为秒后的值,`pos` 表示当前帧在文件中的位置,可以通过 `grep` 命令筛选出每一帧的时间戳信息。
ffmpeg 获取全部帧 并显示时间为图片命名
您可以使用以下命令来获取视频中的所有帧并将每一帧的时间戳作为图片文件名:
```
ffmpeg -i input.mp4 -vf "setpts=PTS-STARTPTS,select=gt(scene\,0),drawtext=fontfile=/path/to/font.ttf:text='%{pts\:hms}':x=(w-tw)/2:y=h-(2*lh):fontsize=24:fontcolor=white" output_%Y%m%d%H%M%S_%3d.jpg
```
这个命令将会输出视频文件 `input.mp4` 中的所有帧,并将每一帧的时间戳作为图片文件名,格式为 `output_年月日时分秒_帧序号.jpg`。其中:
- `-vf "setpts=PTS-STARTPTS,select=gt(scene\,0),drawtext=fontfile=/path/to/font.ttf:text='%{pts\:hms}':x=(w-tw)/2:y=h-(2*lh):fontsize=24:fontcolor=white"` 表示使用 `setpts` 滤镜将时间戳从相对时间转换为绝对时间,使用 `select` 滤镜选择所有非黑色帧(即选择有变化的帧),并使用 `drawtext` 滤镜在每一帧的下方绘制时间戳。
- `fontfile=/path/to/font.ttf` 表示使用指定的 TrueType 字体文件。
- `text='%{pts\:hms}'` 表示将当前帧的时间戳格式化为 `时:分:秒` 的形式,并将其作为文本绘制在图片上。
- `x=(w-tw)/2:y=h-(2*lh)` 表示将文本绘制在图片的中央下方,与图片底部相距两个行高的位置。
- `fontsize=24` 表示文本的字号为 24。
- `fontcolor=white` 表示文本的颜色为白色。
- `output_%Y%m%d%H%M%S_%3d.jpg` 表示输出图片的文件名格式,其中 `%Y%m%d%H%M%S` 表示用年月日时分秒来表示当前时间,`%3d` 表示用三位数字来表示每一帧图片的序号,`.jpg` 则表示输出的图片格式为 JPG。
这个命令会在当前目录下输出一系列以 `output_年月日时分秒_帧序号.jpg` 命名的图片文件,每一帧的时间戳都会作为图片文件名的一部分。
阅读全文