Por que a opção -to às vezes se comporta de maneira diferente?

0

Dois vídeos diferentes estão me dando problemas ao criar código para cortá-los em um determinado momento, porque o mesmo código não corta os vídeos da mesma maneira quando processados pelo mesmo comando ffmpeg

Com o primeiro vídeo, se eu especificar um -to de 10, ele será cortado em um quadro antes.

Com o segundo vídeo, se eu especificar um -to de 10, ele cortará em esse quadro.

A partir da leitura de um comentário aqui , uma pessoa diz que "a busca nem sempre é executada em dts , na verdade, depende do contêiner. Se os registros de data e hora do contêiner forem pts, a busca estará em pts; se os registros de data e hora do contêiner forem dts, a procura estará em dts. "

O que posso fazer para determinar como meus cortes funcionarão de antemão?

Idealmente, gostaria de poder encontrar as informações na saída de um comando ffprobe e, em seguida, ajustar minha lógica de acordo

video 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

video 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
    
por Houseman 24.04.2018 / 01:50

1 resposta

1

Claro, você pode usar o ffprobe para inspecionar os quadros e pacotes:

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

Isso mostrará o PTS e o DTS de cada pacote.

A postagem a seguir pode ajudar você a identificar o quadro-chave mais próximo antes de um determinado timestamp.

    
por 24.04.2018 / 12:30