web-dev-qa-db-ja.com

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

WMV(v9(WMV3)、960x720、30.000030 fps、プレーナ4:2:0 YUV、PowerPoint 2010で作成)ファイルを取得し、それをMPEG2に変換する必要があります-TVセットが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ビルドを使用しています。

16
Ivan

問題は、MPEG-2のデフォルトのビットレートがかなり低いことです(ffmpegの他のほとんどのビデオエンコーダーと同様、H.264は例外です)。 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 /秒になります。 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パートIIビデオ がサポートされている必要があります( "DivX"として知られていること– an MPEG-4パートIIエンコーダー)。 :

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"

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

16
slhck

ファイルサイズが問題にならない場合は、ビットレートを上げてみてください。

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

それは私にはうまくいったようです。

0
dstob