Estou tentando converter minha videoteca para o formato HEVC para ganhar espaço. Executei o seguinte comando em todos os arquivos de vídeo da minha biblioteca:
#!/bin/bash
for i in *.mp4;
do
#Output new files by prepending "X265" to the names
avconv -i "$i" -c:v libx265 -c:a copy X265_"$i"
done
Agora, a maioria dos vídeos converte-se bem e a qualidade é a mesma de antes. No entanto, alguns vídeos de qualidade muito alta (por exemplo, uma impressão de filme de 5 GB) perdem a qualidade - o vídeo é todo pixelizado.
Não tenho certeza do que fazer neste caso. Preciso modificar o crf
parâmetro na minha linha de comando? Ou alguma outra coisa?
O problema é que estou fazendo uma conversão em massa. Então, preciso de um método em que avconv
ajuste automaticamente qualquer parâmetro que precise de ajuste para cada vídeo.
UPDATE-1
Descobri que crf
é o botão que preciso ajustar. O CRF padrão é 28. Para obter melhor qualidade, eu poderia usar algo menor que 28. Por exemplo:
avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4
No entanto, o problema é que, para alguns vídeos, o valor de CRF 28 é bom o suficiente, enquanto para alguns vídeos é necessário um CRF menor. Isso é algo que eu tenho que verificar manualmente convertendo pequenas seções dos vídeos grandes. Mas na conversão em massa, como eu verificaria cada vídeo manualmente? Existe alguma maneira de avconv
ajustar a CRF de acordo com a entrada de vídeo de maneira inteligente?
UPDATE-2
Descobri que há uma --lossless
opção no x265: http://x265.readthedocs.org/en/default/lossless.html .
No entanto, não sei como usá-lo corretamente. Tentei usá-lo da seguinte maneira, mas produziu resultados opostos (o vídeo ficou ainda mais pixelizado):
avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4
--lossless
de fato, pode ampliar o arquivo, se ele decodificar o codec anteriormente com perdas e, em seguida, incluir o que decodificou sem perdas. A qualidade permanecerá exatamente igual à entrada.