Questão Como dividir e combinar vídeos com precisão com o ffmpeg respeitando ponto de entrada / ponto


Estou aprendendo a dividir e combinar vídeos com ffmpeg. Atualmente estou praticando em um 799 KB MP4, one_through_ten-timestamped.mp4, onde cada quadro tem um "número de quadro" queimado (até o quadro 40, o número gravado avança somente a cada outro quadro).

O comando que eu uso é:

ffmpeg -f concat -i one_through_ten_edit_list.txt -c copy one_through_ten_edited.mp4

Onde one_through_ten_edit_list.txt é:

file one_through_ten-timestamped.mp4
inpoint 00:00:01.500
outpoint 00:00:05.000
file one_through_ten-timestamped.mp4
inpoint 00:00:09.500
outpoint 00:00:13.000

Quando eu executo este comando em ffmpeg o vídeo de saída tem vários problemas:

  1. A saída começa a partir do início do vídeo de origem, em vez de 1,5 s em.
  2. O áudio depois que o segundo vídeo de entrada é concatenado é atrasado (quando reproduzido no QuickTime Player. Tudo bem em ffplay).

Quando eu executo essas mesmas edições MPEG Streamclip, o vídeo resultante é reproduzido como esperado. Aqui está uma saída tabular de ffprobe em one_through_ten-timestamped.mp4 que mostra onde o vídeo ffmpeg e o MPEG Streamclip diferem em seus pontos de concatenação:

start of first segment end of first segment mpeg streamclip start 1st start of second segments end of second segment

Observe que ambos ffmpeg e MPEG Streamclip lidar com o segundo segmento mais ou menos o mesmo, no entanto ffmpeg parece não respeitar o inpoint no primeiro vídeo de entrada. Note que no meu MP4, há um pacote por quadro.

ffmpeg se comportou dessa maneira da versão 2.8 (talvez antes) até 3.3.3. Estou faltando uma opção de linha de comando ou lista de edição? Certamente, outros têm usado com sucesso ffmpeg para dividir e combinar vídeos (sem recomprimir).


1


origem


De documentação demuxer concat: "inpoint - Esta diretiva funciona melhor com codecs intra-frame, porque para frames não-intra-frame você normalmente obterá pacotes extras antes do ponto In real e o conteúdo decodificado provavelmente conterá frames antes do ponto In também." - LordNeckbeard


Respostas: