Como criar um arquivo de vídeo MPEG2 com a melhor qualidade possível usando o FFMPEG?

12

Tenho um arquivo WMV (v9 (WMV3), 960x720, 30.000030 fps, planar 4: 2: 0 YUV, produzido pelo PowerPoint 2010) e preciso convertê-lo em MPEG2 - o único formato que meu TVset pode ler de um arquivo. Unidade flash USB (eu também tentei MP4 / h.264, AVI / XVID - nada além de MPEG2 funciona).

Consegui fazer o trabalho com simplicidade

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

mas a qualidade do resultado é terrível (distorções visuais claramente visíveis são introduzidas) e a reprodução não é suave (lenta demais em alguns momentos).

Eu também tentei

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

(Eu encontrei isso em algum lugar na Internet e modifiquei um pouco - mudei o resoultion, a taxa de atualização e o formato de saída (de VOB para MPG nua)) com sucesso mas a qualidade ainda é muito ruim.

Quais parâmetros eu tenho que usar para economizar o máximo de qualidade possível? A taxa de compactação não importa, até mesmo o aumento no tamanho do arquivo é aceitável.

Outra coisa que eu realmente preciso (eu escolhi não incluí-lo no título da questão para evitar que seja muito específico, mas eu aprecio isso sendo considerado nas respostas) está adicionando puro silêncio como trilha sonora - não há som no original, mas o aparelho de TV se queixa sobre isso e eu gostaria de se livrar dessa queixa. Eu criei um arquivo OGG Vorbis com o mesmo tamanho (segundo preciso) de silêncio usando o Audacity, mas não consigo mesclá-lo com o vídeo:

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

e até mesmo nu

ffmpeg -i in.mpg -c:v copy -out.mpg

fornece erros "buffer underflow" e "pacote muito grande". (in.mpg são os arquivos produzidos pelo mesmo binário FFMPEG e o mesmo arquivo WMV de origem usando os dois primeiros comandos da questão).

Estou usando uma compilação Zeranoe FFMPEG no Windows 7.

    
por Ivan 04.11.2014 / 18:45

2 respostas

11

O problema é que a taxa de bits padrão para o MPEG-2 é bastante baixa (como na maioria dos outros codificadores de vídeo no ffmpeg, o H.264 é uma exceção). O MPEG-2 também não é a melhor escolha como codec atualmente.

Melhor qualidade para MPEG-2

Você tem algumas opções para usar o MPEG-2:

  • Aumente a taxa de bits. Agora você está usando -b:v 2500k . Se for um vídeo HD, você não irá longe com apenas 2,5 MBit / s. Você precisa pelo menos dobrar isso ou até mais para fazer o resultado parecer bom. Por exemplo, use -b:v 6000k -target pal-dvd .

    Para 720p, acho que você ainda deve usar uma taxa de bits maior. Lembre-se que os DVDs usam MPEG-2 e chegam a cerca de 4,7 GB por 2 horas de filme, então você acaba com cerca de 5 a 8 MBit / s. O MPEG-2 não é muito eficiente em termos de compactação e funciona melhor em taxas de bits mais altas.

  • Use uma configuração de qualidade específica. Altere -b:v … para -qscale:v 2 . O número aqui varia de 1 a 31 e maior significa menor qualidade. Não faz sentido ir além de 4 ou 5. Se você não se importa com a taxa de bits, comece com 2 e veja se isso funciona para você.

Brincar com o número de quadros B, o método de estimativa de movimento ou o tamanho do GOP podem ajustar um pouco a qualidade, mas não resultam em grandes alterações.

Áudio silencioso

Use -f lavfi -i aevalsrc=0 para gerar um fluxo de áudio silencioso. Por exemplo:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

Você pode precisar adicionar -target pal-dvd ao comando acima para forçar um determinado tamanho de buffer.

Eu escolhi o MP3 como codec. Os arquivos MPEG não podem conter áudio diferente do MPEG Layer I e II, assim como streams PCM, portanto, usar um arquivo Ogg Vorbis silencioso não funcionará, a menos que você converta o fluxo de áudio (que não é o que você está fazendo quando usa-c:a copy).

Use um codec de vídeo diferente

Estou surpreso que uma TV que reproduz arquivos de vídeo leia MPEG-2, mas não qualquer outra coisa. Pelo menos vídeo MPEG-4 Parte II deve ser suportado (é o que você sabe como "DivX" - um Codificador MPEG-4 Parte II). Então você poderia tentar:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

Sua TV também pode realmente suportar H.264, mas apenas um determinado perfil. Tente usar o perfil baseline , por exemplo:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

No exemplo acima, usei a opção CRF para definir a qualidade em vez de qscale . Consulte o guia de codificação H.264 para saber mais.

    
por 04.11.2014 / 19:16
0

Eu diria imediatamente que, se o tamanho do arquivo não importa, experimente aumentar a taxa de bits.

Para o áudio silencioso, você pode apenas querer usar o ffmpeg, eu não sei o suficiente sobre o Audacity para fazer qualquer tipo de comentário. Eu já usei isso antes.

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

Isso não funcionará para você, já que você está usando o contêiner mpg, então você pode querer tentar (contêiner mp3)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

Pareceu funcionar para mim.

    
por 04.11.2014 / 19:22