为什么 -to 选项有时会表现不同?

为什么 -to 选项有时会表现不同?

当我编写代码在给定时间剪切两个不同的视频时,我遇到了麻烦,因为相同的代码在通过相同的ffmpeg命令处理时不会以相同的方式剪辑视频

对于第一个视频,如果我指定-to10,它会在前一帧处剪切。

对于第二个视频,如果我指定-to10,它会剪切那个框架。

通过阅读评论这里,有人说“查找并不总是在 dts 上进行,它实际上取决于容器。如果容器时间戳是 pts,则查找以 pts 为单位;如果容器时间戳是 dts,则查找以 dts 为单位。”

我可以做些什么来提前确定我的削减将如何进行?

理想情况下,我希望能够在ffprobe命令的输出中找到信息,然后相应地调整我的逻辑

视频 1

ffprobe -hide_banner steamedHams.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'steamedHams.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2018-02-17T02:19:35.000000Z
  Duration: 00:02:43.10, start: 0.000000, bitrate: 190 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 116 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, mono, fltp, 72 kb/s (default)
    Metadata:
      creation_time   : 2018-02-17T02:19:35.000000Z
      handler_name    : IsoMedia File Produced by Google, 5-11-2011

视频 2

ffprobe -hide_banner trailer.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'trailer.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2018-03-14T22:10:26.000000Z
    encoder         : HandBrake 1.0.7 2017040900
  Duration: 00:00:33.02, start: 0.000000, bitrate: 2778 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2653 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2018-03-14T22:10:26.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 159 kb/s (default)
    Metadata:
      creation_time   : 2018-03-14T22:10:26.000000Z
      handler_name    : Stereo

答案1

当然,您可以使用 ffprobe 来检查帧和数据包:

ffprobe -select_streams v -show_packets \
-show_entries packet=pts_time,dts_time -of compact=p=0 input.mp4

这将显示每个数据包的 PTS 和 DTS。

以下帖子可能会对你有帮助识别最近的关键帧在给定的时间戳之前。

相关内容