2013-04-02 11 views
8

私はWebMのに私の映画をエンコードしようとしている:なぜFFMPEGは常に大きなWebMファイルを作成しますか?

ffmpeg -i input.MOV -codec:v libvpx -quality good -cpu-used 0 -b:v 10k 
-qmin 10 -qmax 42 -maxrate 10k -bufsize 20k -threads 8 -vf scale=-1:1080 
-codec:a libvorbis -b:a 192k 
output.webm 

私は異なるビットレートのカップル(映像と音声の組み合わせ)でエンコードしたい:

  • 2192 kbpsの
  • 1692 kbpsの
  • 千kbpsの

問題がどんなにが金利をどのビットということです私は、私は常にビットレート1900 kbps以上のファイルを取得します。 (上記のコード例では1914 kbps)

何が間違っていますか?

答えて

12

libvpxは、レート制御と品質設定に関しては少し複雑です。詳細については、vpx Encoding GuideおよびVP8 Encode Parameter Guideを参照してください。それを理解するために私はソースコードを掘り起こすのに1時間かかりました。

あなたが一定のビットレートを設定したい場合は、あなたがそうのような、たとえば、同じ値にmaxrateminrateb:vを設定する必要があります(私は簡潔にするため、ここでオーディオのオプションを残していることに注意してください):

ffmpeg -i input.mov -c:v libvpx -b:v 1900K -maxrate 1900K -minrate 1900K output.webm 

あなたは変数の品質を使用したいとちょうどビットレートの上限を指定する代わりにした場合、その後、あなたはb:vcrfの両方を設定する必要があります。 crfを省略すると、指定されたビットレートは平均値と見なされます。 crfのみで、エンコーダはb:vの意味を最大許容レートに変更します。

ffmpeg -i input.mov -c:v libvpx -b:v 1900K -crf 10 output.webm 

CRFのための10の値は、良い出発点ですが、libvpxは、あなたがしたい場合にも指定でき、qmin ≤ q ≤ qmaxの範囲内で、フレームごとに品質を変更することがあります。 qminの10の下限を設定することはやや高いようですが、本質的には試行錯誤を繰り返さなければなりません。なぜなら、最大ビットレートが低すぎると、常に飽和状態になるからです。

+0

ありがとうございました! :)あなたが最初の例で言ったように、品質を放棄することはそのトリックでした。それは今の魅力のように機能します。 –

関連する問題