usar ffmpeg para transformar mp4 no mesmo arquivo avi de alta qualidade?

28

Gostaria de usar o ffmpeg para transformar um arquivo de vídeo mp4 em avi, mas com a mesma qualidade, mesmo que ocupe mais espaço. Se eu simplesmente fizer:

ffmpeg -i file.mp4 file.mp4.avi

O arquivo avi resultante é de baixa qualidade e pixelizado. Como posso fazer essa transformação mantendo a qualidade de vídeo e áudio?

719016
fonte
3
Você pode usar o -sameqswitch, que colocará o mesmo codec de vídeo (assumindo H264) no contêiner AVI. Se o seu player não suporta H264 no AVI, é necessário transcodificar o melhor formato de vídeo possível (H264) para algum formato medíocre, o que não é bom. Em seguida, você atribui uma taxa de bits de vídeo mais alta XVID (digamos 2000 Kb / s). Áudio não importa que muito IMHO, mas melhor para converter para MP3, em seguida, AC3
zetah

Respostas:

16

Você sempre perde um pouco de qualidade sempre que transcodifica de um codec para outro, vídeo ou áudio, mas talvez você possa evitá-lo se quiser mudar apenas do tipo de contêiner MP4 para um contêiner AVI. codec:copypode ser útil se você não tiver um motivo para transcodificar (e deve ser mais rápido).

Se você precisar transcodificar porque precisa usar um codec de vídeo específico, espero que você possa usar a sugestão de zetah acima em seu comentário e usar a -sameqopção Como alternativa, você pode usar a qscaleopção para definir a qualidade manualmente. Quanto menor o número, melhor a qualidade, mas mais espaço o seu arquivo terá.

A última vez que transcodifiquei o vídeo, usei qscale=8.0, mas sugiro que você experimente o melhor para corresponder à qualidade da sua entrada.

Marty Jay menciona com presteza que sameq significa o mesmo quantizador da entrada, o que pode não resultar na mesma qualidade. O artigo que ele cita menciona o uso da conversão multipass, que é uma boa maneira de obter melhor compactação sem sacrificar a qualidade.

John S Gruber
fonte
Thanks for the tips, I'll try -sameq see how it goes.
719016
8
-sameq NÃO significa a mesma qualidade; ffmpeg.org/trac/ffmpeg/wiki/…
3
Parece recomendável usar a -qscale 0opção #
user989762 6/15
Bastante antigo, mas recebi esse aviso tentando fazer isso hoje:Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option.
Dave Lugg
10

Minha solução:

ffmpeg -i filename.mp4 -vcodec copy -acodec copy filename.avi

Apreciar!!

kuba
fonte
2
Esteja ciente de que a incorporação de fluxos AVC em contêineres AVI requer um hack suportado por muitos players de vídeo orientados pela comunidade (por exemplo, VLC, MPlayer, qualquer coisa FFmpeg / Libav ou GStreamer, Media Player Classic), mas não por muitos players comerciais (por exemplo, Windows Media Player e QuickTime / iTunes não suportam).
David Foerster
4

Aqui está o meu 2-Pass (Advanced Simple Profile) que eu uso de vez em quando.

passe 1:

ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -pass 1 -an -threads 0 -f rawvideo -y /dev/null

passo 2:

ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -pass 2 -threads 0 -f avi file.avi
duffydack
fonte
Isso é ótimo, me produziu um avi muito pequeno com muito boa qualidade!
jpo38