A relação de aspecto do vídeo cortado com o FFmpeg muda involuntariamente

1

Estou tentando extrair uma pequena parte de um vídeo maior sem alterar os codecs, a resolução ou qualquer outra coisa. Portanto, eu uso o FFmpeg com as seguintes configurações.

ffmpeg -vcodec copy -acodec copy -ss 01:00:00 -t 00:00:30 -metadata title="Custom title" -metadata artist="Artist Name" -metadata language="English" -i input_file_h264.mp4 output_file.mp4

Estou processando o vídeo no Ubuntu 10.10. com o FFmpeg versão 0.6-4: 0.6-2ubuntu6.2.

O arquivo de saída vem com as mesmas informações de codec que o arquivo de entrada. No entanto, ele se abre no VLC e em outro media player como se a resolução do vídeo tivesse mudado . A fonte de entrada vem com uma resolução de 720x576. O codec utilizado é o H264 - MPEG-4 AVC (parte 10) (avc1). Quando o vídeo de saída é aberto, aparece mais amplo (16: 9), embora as configurações de vídeo não tenham sido alteradas. Eu não consegui encontrar nada parecido com a proporção configurada incorretamente no VLC também.

Você conhece algum problema com o H264 no Ubuntu? Tanto quanto eu entendo libx264 é usado. Mas isso é relevante quando eu simplesmente participo um vídeo?

Como sugerido por slhck, mudei a ordem dos argumentos.

ffmpeg -ss 01:00:00 -i 28c3-4906-en-lightning_talks_day_3_pecha_kucha_h264.mp4 -vcodec copy -acodec copy -t 00:00:30 output_file_slhck.mp4
por JJD 31.12.2011 / 14:35

1 resposta

2

Você não está copiando o fluxo de vídeo.

Forneça as opções acodec e vcodec após a opção i . Basta pensar em como você os processaria. Primeiro, leia o arquivo, decida como codificar e, em seguida, imprima. Se você não fizer isso, as opções serão analisadas de forma diferente 1 , o que explicaria a diferença na entrada e saída de acordo com o seu log:

Input:  Stream #0.0(und): Video: h264, yuv420p, 720x576 [PAR 64:45 DAR 16:9]
Output: Stream #0.0(und): Video: libx264, yuv420p, 720x576 [PAR 89:44 DAR 445:176]

Observe a diferença no Pixel Aspect Ratio (PAR)? Atualmente, você está tentando decodificar o vídeo com o codec copy , que obviamente não existe. Colocação de opções no FFmpeg realmente importa às vezes. 2

Isto também é o que o manual diz:

Select an encoder (when used before an output file) or a decoder (when used before an input file) for one or more streams

Então, para resumir - metadados deixados para legibilidade:

ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4

1 - Com as versões mais recentes do FFmpeg, o comando teria falhado porque um decodificador copy não existe.

2 - Além disso, coloque a opção t após o processo de codificação e deixe ss no início. Colocar ss no início garante que o arquivo seja lido até a hora e, em seguida, comece a codificação. Se você colocasse ss após i , isso codificaria o arquivo desde o início, o que poderia levar um longo tempo.

    
por 31.12.2011 / 14:57