web-dev-qa-db-ja.com

ffmpegを使用してmp4を同じ高品質のaviファイルに変換しますか?

Ffmpegを使用して、mp4ビデオファイルをaviに変換しますが、より多くのスペースを占有する場合でも同じ品質です。私が単にする場合:

ffmpeg -i file.mp4 file.mp4.avi

結果のaviファイルは非常に低品質でピクセル化されています。ビデオとオーディオの品質を維持しながらこの変換を行うにはどうすればよいですか?

26
719016

あるコーデックから別のコーデック、ビデオまたはオーディオにトランスコードするときは常に少し品質が低下しますが、MP4コンテナタイプからAVIコンテナにのみ変更する場合は、おそらくそれを避けることができます。 codec:copyは、トランスコードする理由がない場合に役立ちます(より高速になります)。

特定のビデオコーデックを使用する必要があるためトランスコードする必要がある場合は、上記のzetahの提案をコメントで使用し、-sameqスイッチを使用できることを願っています。または、qscaleオプションを使用して、品質を手動で設定することもできます。数値が小さいほど品質は向上しますが、ファイルに必要なスペースが増えます。

前回ビデオをトランスコードしたときにqscale=8.0を使用しましたが、入力の品質に合わせて最適なものを見つけるために実験することをお勧めします。

Marty Jayは、sameqは入力と同じ量子化器を意味し、同じ品質にはならない可能性があることを有益に言及しています。彼が引用する記事では、マルチパス変換の使用について言及しています。これは、品質を犠牲にすることなく、より良い圧縮を達成するための良い方法です。

16
John S Gruber

私の解決策:

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

楽しい!!

9
kuba

これが、私が時々使用する2パス(Advanced Simple Profile)です。

パス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

パス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
4
duffydack