ffmpeg输出25fps视频的第一帧仅显示1ms

问题描述 投票:0回答:1

我正在使用ffmpeg按帧分割视频。对于25fps的视频,我的期望是它将显示帧0为40ms,然后它将显示帧1为40ms等。但是,当我使用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.png0.001.png是相同的框架,但产生的pngs是不同的。然而,另一方面,0.001.png0.040.png是相同的框架,而0.040.png0.041.png是不同的框架。似乎0.000.png的框架仅显示1ms。我已经在多个不同的视频上对此进行了测试,结果一致。任何人都可以解释为什么这是或为什么我的期望可能不正确?

作为旁注,当我将相同的视频加载到浏览器中的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视频之间的视频帧/时间匹配更加烦人。有谁知道这里发生了什么?

如果它有用,这里是视频的元数据:

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
video ffmpeg html5-video mp4 h.264
1个回答
1
投票

-ss将匹配指定时间戳或之后的第一帧。

对于第一帧持续时间和后续视频帧时间戳,您的文件具有AAC音轨,其具有priming sample,并且看起来浏览器/播放器不跳过启动示例,并且抵消视频时间戳以保持同步。

© www.soinside.com 2019 - 2024. All rights reserved.