ffmpegを使用して高品質のビデオをエンコードする[終了]


92

一連のビデオフレームをイメージとしてディレクトリに保存し、これらを高品質のビデオにエンコードしようとしていますが、試行するすべての設定とすべてのフォーマットで非常に顕著なアーティファクトが生成されます。

基本的なコマンドは次のとおりです。

ffmpeg -r 25 -i %4d.png myvideo.mpg

そして、minrateフラグとmaxrateフラグを試しました。{mpg、avi、mov、flv}形式のいずれでも使用できます。

設定に関する提案はありますか?最終的なファイルサイズは問題ではありません。


7
私のMacでは、次のコマンドを使用しますffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4。フレームレートを強制するには、入力ファイルと出力ファイルの両方に指定する必要があることがわかりました。このコーデックは私にとってはうまくいくようです-あなたはそれを指定する必要がないかもしれません。作業に多くの時間を費やしてきたので、自分がしたことを含めたかっただけです。唯一の欠点は、入力画像が高コントラスト(白の背景に青と赤のボール)であり、映画の後半で、ボールがすべて同じ暗い色になり始め、望ましくないコントラスト効果が発生することです。
jvriesem 2013年

@jvriesem、ありがとう!これは私にとってはうまくいきました。
Dan Loewenherz 2015


c ++バージョンstackoverflow.com/a/43464269/6180077このリンクにアクセスして、FFMPEG c ++ mp4形式のスクリーンレコーダーアプリケーションを動作させてください。
Abdullah Farweez

プログラムでFFMPEGライブラリを使用してビデオファイルを書き込む方法を示すこのリンクを確認してください:stackoverflow.com/a/43464269/6180077
Abdullah Farweez

回答:


64

いくつかのこと:

  • ビデオのビットレートを設定する必要があります。私はminrateとmaxrateを使用したことがないので、正確に機能するかわかりませんが、-bスイッチを使用してビットレートを設定することで、高品質のビデオを取得できます。圧縮とビデオ品質の間の適切なトレードオフを提供するビットレートを考え出す必要があります。これはすべて、ビデオのコンテンツのフレームサイズ、フレームレート、モーションの量に依存するため、実験する必要があるかもしれません。DVDは720x480で平均4〜5 Mbit / sになる傾向があることを覚えておいてください。そのため、私は通常、そこから始めて、必要かどうかを判断し、実験を行います。たとえば-b 5000k、コマンドラインに追加して、DVDビデオのビットレートを増減できます。

  • ビデオコーデックを指定する必要があります。そうしないと、ffmpegはデフォルトでMPEG-1になり、MPEG-1はかなり古く、MPEG-4またはH.264に近い圧縮量を提供しません。ffmpegバージョンがlibx264サポート付きでビルドされている場合-vcodec libx264は、コマンドラインの一部として指定できます。それ以外の場合-vcodec mpeg4も、MPEG-1よりも優れた機能を発揮しますが、x264ほどではありません。

  • 他の多くの高度なオプションがあり、最低のビットレートで最高の品質を引き出すのに役立ちます。いくつかの例については、こちらご覧ください。


6
一定のビットレートは品質に悪影響を及ぼします。定率係数の使用は優れています(x264の動作モードの1つです)。次に例を示しますffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …。18は非常にわずかな品質低下を伴うCRFですが、ビットレートはおそらく低くなります。また、ファイルサイズを小さくする必要がある場合は、より大きなCRF値を試すことができます。ご覧のとおり、これは非常に簡単です。
表示名

-bはビデオの前、ただし入力の後にある必要があることに注意してください-i
mateuszb

45

ビデオのビットレートを上げるには-vbオプションを指定する必要があります。そうしないと、デフォルトでは、小さいビデオが生成されますが、アーティファクトが多くなります。

このようなものを試してください:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


1
これは私にとってはうまく
いき

15

ビデオを作成する前に、PNGが完全に不透明であることを確認してください

たとえば、imagemagickを使用して、背景を黒にします。

convert 0.png -background black -flatten +matte 0_opaque.png

私のテストによると、ffmpeg PNGに透明度を設定してフィードした場合、ビデオを美しく見せるためにはビットレートもコーデックも十分ではありません


これで問題は解決しました。
マテイKripner

0

なんらかの後処理作業を行わない限り、ビデオは元のフレームよりも優れたものにはなりません。また、フリップブックのように、キーフレーム間に大きな「ジャンプ」がある場合、それはおかしく見えます。通常、スムーズなアニメーションを実現するには、キーフレーム間に十分な「トゥイーン」が必要です。HTH


画像は元々ビデオシーケンスからのものです。彼らは、ちょっとしたトリミング、スケーリング、そしてimagemagickで行われていないことをしました。効果は間違いなく圧縮アーチファクトです。私は今、答えを持っていると思われ、この記事を見てきました:stackoverflow.com/questions/3158235/...
CakeMaster

@CakeMaster例では ".png"画像があるため、非可逆圧縮については触れませんでした。.pngは非可逆的ですが、通常はそうではありません。.jpgはほとんどの場合不可逆的であるため、使用するとアーティファクトが発生します。可能であれば、.pngをロスレス圧縮で再保存することもできます。
JustBoo 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.