FFMPEGを使用して可能な限り最高の品質でMPEG2ビデオファイルを作成する方法


16

WMV(v9(WMV3)、960x720、30.000030 fps、平面4:2:0 YUV、PowerPoint 2010で作成)ファイルを取得し、それをMPEG2に変換する必要があります-私のテレビでUSBフラッシュドライブから読み取れる唯一の形式(MP4 / h.264、AVI / XVIDも試しました。MPEG2以外は動作しません)。

私は簡単に仕事に成功しました

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

しかし、結果の品質は恐ろしく(はっきりと見える視覚的な歪みが生じます)、再生はスムーズではありません(ある瞬間に遅すぎます)。

私も試しました

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"

(私はこれをインターネットのどこかで見つけて少し修正しました-記憶、リフレッシュレート、出力形式(VOBからベアMPGに変更))は成功しましたが、品質はまだあまりにも悪いです。

可能な限り品質を保存するには、どのパラメーターを使用する必要がありますか?圧縮率はまったく問題ではなく、ファイルサイズを大きくしても問題ありません。

私が実際に必要とする別のこと(私はそれを質問タイトルに含めずに具体的にしすぎないように選択しましたが、答えで考慮されることを感謝します)は、サウンドトラックとして純粋な沈黙を追加することです-サウンドはありませんオリジナルですが、テレビはそれについて文句を言います、そして、私はこの文句を取り除きたいです。Audacityを使用して、同じ長さ(2番目の正確な)無音OGG Vorbisファイルを生成しましたが、ビデオとマージすることができません。

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

そして裸でも

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

「バッファアンダーフロー」および「パケットが大きすぎます」エラーが発生します。(in.mpgは、問題の最初の2つのコマンドを使用して、同じFFMPEGバイナリと同じソースWMVファイルによって生成されたファイルです)。

Windows 7でZeranoe FFMPEGビルドを使用しています。


2
誰かが完全な出力ログを求めてきます。
dstob

どのテレビが正確に設定されていますか?異なるプロファイルであるH.264を読み取ることができる場合があります。
slhck

@slhck TVセットはPhilips 42PFL3606H/58、私はH.264にエンコードしffmpeg -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"ています-プロファイルは私が知っている中で最も低く、結果のファイルの再生をより簡単にするためにさらに調整が行われています。
イヴァン14年

1
マニュアルによると、TVはMPEG-4 VisualとH.264をサポートしています。ベースラインプロファイルが機能しない場合、何が機能するのかわかりません。しかし、テレビは非常にうるさいです。
slhck

回答:


16

問題は、MPEG-2のデフォルトのビットレートがかなり低いことです(ffmpegの他のほとんどのビデオエンコーダーと同様に、H.264の1つは例外です)。MPEG-2は、最近のコーデックとしては最良の選択ではありません。

MPEG-2の品質向上

MPEG-2に固執したい場合、いくつかのオプションがあります。

  • ビットレートを上げます。を使用してい-b:v 2500kます。HDビデオの場合、わずか2.5 MBit / sで遠くまで行くことはできません。結果を良く見せるためには、少なくともそれの2倍以上が必要です。たとえば、を使用します-b:v 6000k -target pal-dvd

    720pでは、より高いビットレートを使用する必要があると思います。DVDはMPEG-2を使用し、2時間の映画で約4.7 GBになるため、最終的には約5〜8 MBit / sになることに注意してください。MPEG-2は実際にはあまり圧縮効率が良くなく、ビットレートが高いほどよく機能します。

  • 特定の品質設定を使用します。に変更-b:v …-qscale:v 2ます。ここでの数は1から31の範囲で、値が大きいほど品質が低くなります。4または5を超えるポイントはありません。ビットレートを気にしない場合は、2から始めて、それが適切かどうかを確認します。

Bフレームの数、モーション推定方法、またはGOPサイズをいじっても、品質は多少調整される場合がありますが、大きな変更は発生しません。

サイレントオーディオ

-f lavfi -i aevalsrc=0サイレントオーディオストリームを生成するために使用します。例えば:

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

-target pal-dvd特定のバッファサイズを強制するには、上記のコマンドに追加する必要がある場合があります。

コーデックとしてMP3を選択しました。MPEGファイルには、MPEGレイヤーIおよびIIオーディオとPCMストリーム以外のオーディオを含めることができないため、オーディオストリームも変換しない限り、サイレントOgg Vorbisファイルの使用は機能しません(使用時に行うことはできません-c:a copy) 。

別のビデオコーデックを使用する

私は、ビデオファイルを再生するテレビがMPEG-2を読みますが、それ以外は読み込めないことに驚いています。少なくともMPEG-4 Part IIビデオをサポートする必要があります(これは、MPEG-4 Part IIエンコーダーである「DivX」として知られています)。だからあなたは試すことができます:

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

お使いのテレビも実際にはH.264をサポートしている場合がありますが、特定のプロファイルのみです。baselineたとえば、プロファイルを使用してみてください。

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"

上記の例では、CRFオプションを使用しての代わりに品質を設定しましたqscale。詳細については、H.264エンコーディングガイドを参照してください。


「Bフレームの数、モーション推定方法、またはGOPサイズを変更すると、品質が多少調整される場合がありますが、大きな変更は発生しません。」-すべてのフレームをBフレームにして、MPEG2でモーション推定を使用しないでください。ビデオには非常にダイナミックな部分がたくさんあります。
イヴァン14年

私はあなたが(提案最初のコマンドラインを試してみましたffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4") -それは約100フレームを符号化した後のようなエラーで画面をフラッディングを開始[mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761して[mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it
イヴァン14年

@Ivanでビットレートを変更し-b:vます。私の答えに追加しました。エンコーダー設定に関して:すべてのフレームをBフレームにすることはできません。また、動きの推定も必要です。メソッドを徹底的に使用するほど、圧縮が向上します。ただし、ダイナミックビデオの場合、最初に必要なのはビットレートを大幅に増やすことです。エンコード設定は実際にはあまり影響しません。エラーについては、これが正しいコマンドのエラーであると確信していますか?[mpeg]あなたの出力ファイルがある場合は、エラーにのみ発生することができ.mpg、それはだとき、ありません.mp4
slhck

私は間違った部分をコピー=ペーストしました、@ slhck、ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"もちろん使用しています。
イヴァン14年

1
-target pal-dvd問題を解決しますが、-bufsize動作しません(試しました-b:v 7M -bufsize 7M -maxrate 7M)。
イヴァン14年

0

ファイルサイズがあまり重要でない場合は、ビットレートを上げてみてください。

ffmpegを使用したいだけのサイレントオーディオについては、Audacityについてのコメントがありません。以前にこれを使用したことがあります。

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

ただし、mpgコンテナを使用しているので、これはうまくいきません。試してみてください(mp3コンテナ)

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

うまくいったようです。


ffmpegはビデオに必要なものだけを使用するため、期間を設定する必要はありません。
slhck 14年

Ivanが行ったように、2段階のプロセスに物事を保管しました。私のコマンドで期間を省略した場合、ffmpegの実行時間はわかりません(必要以上に長くなる可能性があります)。
dstob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.