Tenho um arquivo WMV (v9 (WMV3), 960x720, 30.000030 fps, planar YUV 4: 2: 0, produzido pelo PowerPoint 2010) e preciso convertê-lo em MPEG2 - o único formato que meu TVset pode ler em uma unidade flash USB (Eu também tentei MP4 / h.264, AVI / XVID - nada além de MPEG2 funciona).
Eu consegui o trabalho com simples
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 (muito lenta 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"
(Encontrei isso em algum lugar da Internet e modifiquei um pouco - mudei a resoultion, a taxa de atualização e o formato de saída (de VOB para MPG) - 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 compressão não importa, mesmo o aumento no tamanho do arquivo é aceitável.
Outra coisa de que realmente preciso (escolhi não incluí-lo no título da pergunta para evitar que seja muito específico, mas eu apreciaria que isso fosse considerado nas respostas) é adicionar puro silêncio como trilha sonora - não há som no original, mas o aparelho de TV reclama e eu gostaria de me livrar dessa reclamação. Eu gerei um arquivo OGG Vorbis de silêncio do mesmo tamanho (segunda precisão) usando o Audacity, mas não consigo mesclá-lo ao vídeo:
ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg
e mesmo nua
ffmpeg -i in.mpg -c:v copy -out.mpg
fornece erros de "buffer underflow" e "pacote muito grande". (in.mpg são os arquivos produzidos pelo mesmo binário FFMPEG e pelo mesmo arquivo WMV de origem, usando os dois primeiros comandos da pergunta).
Estou usando uma compilação Zeranoe FFMPEG no Windows 7.
Philips 42PFL3606H/58
codificando para H.264 comffmpeg -i "in.wmv" -sws_flags lanczos+accurate_rnd -c:v libx264 -crf 20 -preset slow -profile:v baseline -level 3.0 -pix_fmt yuv420p -tune fastdecode -x264-params keyint=240:min-keyint=20 "out.mp4"
- o perfil é o mais baixo que eu conheço e ainda mais ajustes são usados para tornar a reprodução do arquivo resultante uma tarefa mais fácil.Respostas:
O problema é que a taxa de bits padrão para o MPEG-2 é bastante baixa (como na maioria dos outros codificadores de vídeo em ffmpeg, sendo 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 se quiser usar o MPEG-2:
Aumente a taxa de bits. Você está usando agora
-b:v 2500k
. Se for um vídeo em HD, você não irá longe com apenas 2,5 MBit / s. Você precisa pelo menos o dobro disso ou 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 mais alta. Lembre-se de que os DVDs usam MPEG-2 e vêm com 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 realmente não é muito eficiente em compactação e funciona melhor em taxas de bits mais altas.
Use uma configuração de qualidade específica. Mude
-b:v …
para-qscale:v 2
. O número aqui varia de 1 a 31 e superior 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ê.Mexer com o número de quadros B, método de estimativa de movimento ou tamanho de GOP pode alterar um pouco a qualidade, mas não resultará em grandes mudanças.
Áudio silencioso
Use
-f lavfi -i aevalsrc=0
para gerar um fluxo de áudio silencioso. Por exemplo:Pode ser necessário 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 que não seja o áudio MPEG Layer I e II, bem como fluxos PCM, portanto, o uso de um arquivo silencioso Ogg Vorbis não funcionará, a menos que você converta também o fluxo de áudio (que não é o que você faz ao usar
-c:a copy
) .Use um codec de vídeo diferente
Estou surpreso que uma TV que reproduza arquivos de vídeo leia MPEG-2, mas nada mais. Pelo menos o vídeo MPEG-4 Parte II deve ser suportado (é o que você conhece como "DivX" - um codificador MPEG-4 Parte II). Então você pode tentar:
Na verdade, sua TV também suporta H.264, mas apenas um determinado perfil. Tente usar o
baseline
perfil, por exemplo: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 obter mais informações.fonte
ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"
) - ela codifica cerca de 100 quadros e começa a inundar a tela com erros como[mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761
e[mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it
.-b:v
. Adicionado à minha resposta. Em relação às configurações do codificador: Você não pode transformar todos os quadros em quadros B. Além disso, você precisa de estimativa de movimento - quanto mais exaustivo o método, melhor a compactação. Mas se for um vídeo dinâmico, a primeira coisa que você desejará é aumentar significativamente a taxa de bits. As configurações de codificação realmente não têm muito impacto. Quanto ao seu erro, você tem certeza de que este é o erro do comando correto? Um[mpeg]
erro só pode acontecer se o seu arquivo de saída for.mpg
, não quando for.mp4
.ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"
claro.-target pal-dvd
resolve o problema,-bufsize
não funciona (eu tentei-b:v 7M -bufsize 7M -maxrate 7M
).Eu diria imediatamente que se o tamanho do arquivo realmente não importa, experimente aumentar a taxa de bits.
Para o áudio silencioso, você pode querer usar o ffmpeg, não sei o suficiente sobre o Audacity para fazer qualquer comentário. Eu já usei isso antes.
No entanto, isso não funcionará para você, pois você está usando o contêiner mpg, então você pode tentar.
Pareceu funcionar para mim.
fonte