Два разных видео доставляют мне неприятности, когда я придумываю код для их обрезки в определенный момент времени, потому что один и тот же код не обрезает видео одинаковым образом при обработке одной и той же командой ffmpeg

В первом видео, если я укажу -to 10, оно будет вырезано на один кадр раньше.

Со вторым видео, если я укажу -to 10, оно будет вырезано в этом кадре.

Читая комментарий здесь, один человек говорит:«Поиск не всегда выполняется на dts, он фактически зависит от контейнера. Если временные метки контейнера указаны в пунктах, поиск выполняется в пунктах; если временные метки контейнера - 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 ответ1

1

Конечно, вы можете использовать ffprobe для проверки кадров и пакетов:

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

Это покажет PTS и DTS каждого пакета.

Следующий пост может помочь вам определить ближайший ключевой кадр до заданной отметки времени.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .