Certifique-se de que a trilha de áudio e vídeo tenha EXATAMENTE a mesma duração

Certifique-se de que a trilha de áudio e vídeo tenha EXATAMENTE a mesma duração

Eu gero 200 arquivos de vídeo baseados em arquivos de áudio gerados usando sox, combinados com arquivos de imagem. A maioria dos clipes tem menos de um segundo, nenhum tem mais que 6. Em seguida, concateno esses arquivos e há um atraso geral de cerca de 2 segundos no resultado final.

Acredito que isso pode ser devido ao fato de as faixas de áudio e vídeo serem concatenadas de forma independente.

Posso descobrir a duração exata da trilha de vídeo e áudio (stream) usando ffprobe. Somente em um dos arquivos curtos, posso ver que as durações diferem:

ffprobe file001.webm
Input #0, matroska,webm, from 'file001.webm':
  Metadata:
    ENCODER         : Lavf58.20.100
  Duration: 00:00:00.92, start: 0.000000, bitrate: 211 kb/s
    Stream #0:0: Video: vp8, yuv420p, 1100x140, SAR 1:1 DAR 55:7, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc58.35.100 libvpx
      DURATION        : 00:00:00.923000000
    Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
    Metadata:
      ENCODER         : Lavc58.35.100 libvorbis
      DURATION        : 00:00:00.908000000

Como posso fazer com que as faixas de vídeo e áudio em um arquivo de vídeo tenham exatamente a mesma duração?

Estou usando vpx/vorbix/webm (depois de não conseguir entender a causa dos problemas com mpeg2ts), mas usarei qualquer formato para fazer isso.

Também posso adicionar preenchimento de silêncio ao áudio para que correspondam à duração.

Responder1

Basicamente não vale a pena o esforço. Os quadros de áudio têm duração fixa, dependendo do codec e da taxa de amostragem. Por exemplo, aac é 1024/taxa de amostragem. Por exemplo, 1024/48000 ~ 21,333 ms. Portanto, se você reamostrar seu vídeo para um múltiplo perfeito disso, teoricamente seria exato. Supondo que o contêiner não o modifique de forma alguma. Caso contrário, você pode modificar o codificador de áudio para controlar o número de amostras de preparação usadas, o que permitiria obter um primeiro quadro de áudio parcial. Mas, novamente, cada codec é diferente. Caso contrário, você pode usar VFR e definir manualmente a duração final do quadro se o contêiner suportar. Por fim, você pode alterar a lista de edição no mp4 e usar um player que garanta suporte.

Não sei se há alguma ferramenta que possa fazer alguma dessas coisas pronta para uso.

informação relacionada