ffmpeg 输出 25fps 视频的第一帧仅显示 1ms
ffmpeg outputs that the first frame of a 25fps video shows for only 1ms
我正在使用 ffmpeg 按帧分割视频。对于 25fps 的视频,我的期望是它会显示第 0 帧 40 毫秒,然后它会显示第 1 帧 40 毫秒,等等。但是,当我使用 ffmepg 分析视频时,这不是我得到的。
我使用以下命令从视频中提取帧:
ffmpeg -i original.mp4 -ss 00:00:00.000 -vframes 1 0.000.png
ffmpeg -i original.mp4 -ss 00:00:00.001 -vframes 1 0.001.png
ffmpeg -i original.mp4 -ss 00:00:00.040 -vframes 1 0.040.png
ffmpeg -i original.mp4 -ss 00:00:00.041 -vframes 1 0.041.png
在此,我希望 0.000.png
和 0.001.png
是同一帧,但生成的 png 不同。但是,另一方面,0.001.png
和 0.040.png
是同一帧,而 0.040.png
和 0.041.png
是不同的帧。 0.000.png
处的帧似乎只显示了 1 毫秒。我已经在多个不同的视频上对此进行了测试,结果一致。谁能解释这是为什么,或者为什么我的期望可能不正确?
附带说明一下,当我将同一视频加载到浏览器中的 HTML5 视频标签时,当我播放视频时,第一帧显示 64 毫秒,所有其他帧显示 40 毫秒.我可以通过比较以下命令的帧来测试它:
player.currentTime = 0
player.currentTime = .063 // same frame as 0
player.currentTime = .064 // different frame than .063
player.currentTime = .103 // same frame as .064
player.currentTime = .104 // different frame than .103
这也出乎意料,让 ffmpeg 视频和 html5 视频之间的匹配 frames/times 更加烦人。有人知道这里发生了什么吗?
如果有帮助,这里是视频中的元数据:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.101
Duration: 01:36:16.20, start: 0.000000, bitrate: 2301 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 2200 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
Metadata:
handler_name : SoundHandler
-ss
将匹配第一帧 在 或 在 指定时间戳之后。
至于第一帧持续时间和后续视频帧时间戳,你的文件有一个 AAC 音轨,它有一个 ,看起来 browser/player 没有跳过启动样本,并偏移视频时间戳以保持同步。
我正在使用 ffmpeg 按帧分割视频。对于 25fps 的视频,我的期望是它会显示第 0 帧 40 毫秒,然后它会显示第 1 帧 40 毫秒,等等。但是,当我使用 ffmepg 分析视频时,这不是我得到的。
我使用以下命令从视频中提取帧:
ffmpeg -i original.mp4 -ss 00:00:00.000 -vframes 1 0.000.png
ffmpeg -i original.mp4 -ss 00:00:00.001 -vframes 1 0.001.png
ffmpeg -i original.mp4 -ss 00:00:00.040 -vframes 1 0.040.png
ffmpeg -i original.mp4 -ss 00:00:00.041 -vframes 1 0.041.png
在此,我希望 0.000.png
和 0.001.png
是同一帧,但生成的 png 不同。但是,另一方面,0.001.png
和 0.040.png
是同一帧,而 0.040.png
和 0.041.png
是不同的帧。 0.000.png
处的帧似乎只显示了 1 毫秒。我已经在多个不同的视频上对此进行了测试,结果一致。谁能解释这是为什么,或者为什么我的期望可能不正确?
附带说明一下,当我将同一视频加载到浏览器中的 HTML5 视频标签时,当我播放视频时,第一帧显示 64 毫秒,所有其他帧显示 40 毫秒.我可以通过比较以下命令的帧来测试它:
player.currentTime = 0
player.currentTime = .063 // same frame as 0
player.currentTime = .064 // different frame than .063
player.currentTime = .103 // same frame as .064
player.currentTime = .104 // different frame than .103
这也出乎意料,让 ffmpeg 视频和 html5 视频之间的匹配 frames/times 更加烦人。有人知道这里发生了什么吗?
如果有帮助,这里是视频中的元数据:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.101
Duration: 01:36:16.20, start: 0.000000, bitrate: 2301 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 2200 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
Metadata:
handler_name : SoundHandler
-ss
将匹配第一帧 在 或 在 指定时间戳之后。
至于第一帧持续时间和后续视频帧时间戳,你的文件有一个 AAC 音轨,它有一个