Por que o ffmpeg aumenta o tamanho do arquivo?

0

Estou tentando codificar o vídeo com a mesma qualidade no mesmo formato, mas o arquivo de saída é várias vezes maior que o arquivo de entrada. Por que isso acontece? Eu quero corrigir os erros de codificação, mas não posso fazê-lo sem perder qualidade ou aumentar o tamanho do arquivo. Como codificar o vídeo mp4 sem perder qualidade e aumentar o tamanho no terminal Linux?

Eu quero usar o vídeo para mostrar on-line no meu site. Eu estou usando a chamada para ffmpeg abaixo

ffmpeg input.mp4 -c:v libx264 -preset placebo -crf 0 -c:a aac -movflags faststart output.mp4

P.S. Vou adicionar aqui um exemplo de erros. Mesmo se eu chegar aqui, quero entender por que o ffmpeg aumenta meus arquivos. Eu encontro isso regularmente. Esta é a questão principal.

[h264 @ 0x56524c25dea0] Invalid NAL unit 0, skipping.
[h264 @ 0x56524c25dea0] error while decoding MB 32 2, bytestream -7
[h264 @ 0x56524c216260] Invalid NAL unit 0, skipping.
[h264 @ 0x56524c216260] error while decoding MB 46 16, bytestream -5
[h264 @ 0x56524c25dea0] Invalid NAL unit 8, skipping.
[h264 @ 0x56524c25dea0] error while decoding MB 36 1, bytestream -13
[aac @ 0x56524c1e6ea0] Number of bands (57) exceeds limit (44).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] channel element 3.10 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
...
[aac @ 0x56524c1e6ea0] Number of bands (48) exceeds limit (44).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] Error decoding AAC frame header.
Error while decoding stream #0:1: Error number -50531338 occurred
[aac @ 0x56524c1e6ea0] Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] decode_pce: Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12350464
[null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12351488
    
por karpo518 20.04.2018 / 12:50

1 resposta

2

Why is the re-encoded video several times larger than the input file?

Você está impondo o codificador para usar uma configuração de qualidade de vídeo sem perdas com -crf 0 . Isso faz com que o vídeo de saída seja muito maior que a entrada (supondo que seu vídeo de entrada esteja codificado com uma configuração com perdas).

A configuração sem perda limita muito a capacidade de compactação do codificador. Em termos simples: o alto desempenho de compactação obtido pela maioria dos codecs de vídeo, como o x264, ocorre por meio da codificação de vídeo com perdas, que tenta preservar a qualidade "perceptual" ao se livrar de dados perceptivelmente insignificantes.

How to encode mp4 video without losing quality and increasing the file size?

Como funciona a codificação com perdas, é literalmente impossível codificar novamente um vídeo anteriormente codificado com perdas, sem perda de qualidade, a menos que você esteja usando uma configuração sem perdas, que, conforme você encontrou, aumenta o tamanho do arquivo.

Em vez disso, você pode experimentar diferentes valores de -crf para ver que tipo de qualidade / tamanho de arquivo você obtém em seu vídeo de saída. Com a codificação com perdas, sempre será um compromisso entre qualidade e tamanho do arquivo. Você pode ler sobre o controle de taxa de bits de codificação aqui .

    
por 20.04.2018 / 17:49