Quadros pretos no início do arquivo de vídeo quando o arquivo é cortado

0

Eu uso o ffmpeg para cortar um arquivo de vídeo. O formato que eu uso é este:

ffmpeg -i input.avi -ss 00:06:30 -to 00:07:15 -c copy output.avi
Infelizmente, isso deixa alguns quadros negros no começo do meu vídeo de saída, então eu perco certas partes do vídeo. Em um vídeo eu tentei, isso durou um segundo, em outro, os quadros pretos duraram 4 segundos.

O engraçado é que quando eu usei o mesmo comando, exatamente a mesma quantidade de quadro preto existe para o mesmo vídeo. Significado, não importa quantas vezes eu fiz isso para o meu segundo vídeo, em todas as saídas, o vídeo de saída ficará em branco durante os primeiros 4 segundos!

O som funciona muito bem!

Aqui estão alguns outros formatos de comando que eu tentei e NÃO funcionaram:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

Eu descobri minha solução com o comando que usei, mas esse problema ocorreu

EDIT: Eu descobri que, se eu não usar o -c copy bandeira, então eu não tenho os quadros negros:

ffmpeg -i input.avi -ss 00:06:30 -to 00:07:15 output.avi

No entanto, com esse método, a qualidade do meu vídeo de saída é significativamente menor do que o vídeo de entrada ou o vídeo de saída dos métodos anteriores. Então estou de volta à estaca zero.

    
por user1584421 26.06.2017 / 12:06

2 respostas

2

Certifique-se de estar usando uma versão recente do ffmpeg fazendo o download de uma versão estática , por exemplo. Houve algumas mudanças importantes há algum tempo que afetam o funcionamento do corte de fluxo.

Veja a diferença importante entre os comandos que você executou:

  • Ao especificar -c copy , o ffmpeg cortará o vídeo sem modificar o fluxo de bits real. Em outras palavras, ele pegará os quadros como estão e copiá-los para o arquivo de saída. Em alguns casos (simplesmente, quando o horário de início não corresponde a um I-frame ), o ffmpeg precisa inclua mais quadros necessários para decodificar corretamente o primeiro quadro a ser exibido. Aqueles receberão um registro de data e hora negativo, portanto, eles não deverão ser exibidos.

  • Quando você deixar de fora -c copy , o ffmpeg recodificará o vídeo com qualquer codificador ( mpeg4 , libx264 , ...) é o padrão para o formato de saída escolhido (AVI ou MP4 in seu caso). Esses codificadores podem ter configurações de qualidade padrão ou taxa de bits que fazem a saída parecer ruim. Ao recodificar, você deve saber qual qualidade de alvo deseja definir.

Se o recorte com cópia de fluxo não funcionar para você e você precisar recodificar o vídeo, é melhor usar um codec de vídeo (H.264) e um contêiner (MP4) recentes e eficientes e copiar o vídeo. fluxo de áudio:

ffmpeg -ss 00:10:45 -i input.avi -c:v libx264 -crf 18 -to 00:11:45 -c:a copy output.mp4

Aqui, a opção CRF controla a qualidade da saída. Valores entre 18 e 28 são "normais", valores menores são melhores. A opção -ss pode ser uma opção de entrada que torna tudo mais rápido.

Para mais informações, leia o Guia de Busca na Wiki do FFmpeg.

    
por 26.06.2017 / 14:45
0

Para qualquer um que tenha o mesmo problema, eu finalmente consegui resolvê-lo com isto:

ffmpeg -i input.avi -qscale 0 -ss 00:10:45 -to 00:11:45 output.avi
    
por 26.06.2017 / 12:42