Corte de vídeo com quadros ausentes no FFmpeg

0

Eu tentei todos os comandos possíveis para cortar uma parte (1-3 min) de um vídeo H.264 mp4, mas ele sai bem & mau. Meu vídeo é 29,97 FPS, 1080p, ~ 80 minutos, ~ 3,5 GB e bitrate de ~ 6200 KB / s. O problema é que a minha saída começa sem vídeo por 1-2 segundos, em seguida, continua bem, mas o áudio começa em 0 segundos. Ele reproduz bem sincronizado (áudio e vídeo) em qualquer player de mídia, mas ao usá-lo em qualquer outro lugar (renderização para fins de produção) como no Adobe AE, Media Encoder ou um conversor de vídeo, o vídeo final processado começa em 0 segundos. áudio iniciado. Portanto, o áudio termina 1-2 segundos à frente e eu não quero isso. Isso também acontece ao cortar um vídeo do YouTube on-line no link

Meu comando é o seguinte:

ffmpeg -ss 01:19:22.000 -t 00:1:43.000 -i "in.mp4" -acodec copy -vcodec copy out.mp4

Eu até tentei colocar o -ss depois do -i, mas obtenho os mesmos resultados. Além disso, se já tiver um vídeo com esse problema, o que posso fazer para corrigi-lo? O que eu poderia fazer no Adobe AE para isso? Este site: link diz que ele precisa ser cortado nos "keyframes". Se sim, como faço isso no FFmpeg? Como eu os encontro? O que eles são? Eu não pretendo NUNCA recodificar (com -c: v x264), demora muito e recompõe o vídeo com artefatos.

Eu usei construções estáticas e compartilhadas do FFmpeg. Também usado estável 3.2.2 e ffmpeg-20170112-6596b34-win64-static, sem sorte.

TLDR: Meu vídeo que eu cortei no FFMPEG tem quadros faltando (nem mesmo os em branco ou preto) no começo e resulta em áudio / vídeo não sincronizado quando finalmente renderizado em qualquer software de renderização de vídeo.

    
por HoHey22 16.01.2017 / 16:39

1 resposta

3

Use

ffmpeg -ss 01:19:22 -t 00:1:43 -i "in.mp4" -c copy -avoid_negative_ts make_zero out.mp4

A maioria dos vídeos compactados usa compactação temporal, portanto, os quadros dependem de outros quadros para decodificação completa. Se você cortar um vídeo usando o modo copy , alguns quadros após o ponto de entrada poderão depender de quadros antes do ponto de entrada para decodificação. Nesse caso, esses quadros devem ser incluídos. Esses quadros recebem carimbos de data / hora negativos, então bons reprodutores de vídeo os usam para decodificar, mas não para apresentação. O vídeo é mostrado a partir do inpoint em diante. Como todos os quadros de áudio são quadros-chave, o corte de áudio é preciso e a sincronização A / V é preservada.

Aparentemente, os editores de vídeo não parecem prestar atenção ao PTS, portanto mostram todos os quadros armazenados no arquivo. Meu comando acima força o TS positivo para todos os quadros armazenados, então o vídeo / áudio permanecerá sincronizado *.

* Não é totalmente verdade. Para codecs de áudio baseados em MDCT, como MP3 / AAC, o quadro anterior é incluído com PTS negativo, já que é necessário para a decodificação. Talvez seu NLE decodifique esse quadro, levando a uma assíncrona de 21 a 23 ms. A solução alternativa é recodificar o áudio.

    
por 16.01.2017 / 19:34