FFMPEG / libx264:可変フレームレートを指定するにはどうすればよいですか?


16

FFMPEG / libx264(-r / -framerate)に固定フレームレートを提供する代わりに、MAXIMUM値で可変フレームレートを指定し、libx264が適切と思われるフレームレートを下げるようにします。ここでのアイデアは、拡張された静止フレームのようなものがある場合に追加の圧縮を取得することです(私のソースビデオではLOTが発生します)。

予測または双方向のMPEGフレームは非常によく圧縮されることを認識していますが、ソースフレームレートが、トランスコードするつもりのフレームレートよりも小さい可能性もあります(おそらく大きなストリームになります!)。


1
実際にどこで(またはどのように)x264自体にVFRを使用するよう指示していますか?
slhck

それが私の質問です。
マークジェロリマート

2
あなたの質問は、VFR を最大値で指定する方法でした。私は、x264を使用してVFRエンコーディングを指定する方法をまったく知りません。(また、ソースとx264の間の別のレイヤーであるため、この時点ではffmpegについても話していません。)
slhck

@MarkGerolimatos答えは見つかりましたか?!
Dr.jacky

いいえ、私は決してしませんでした。
マークジェロリマトス

回答:


19

あなたも答えを見つけられなかったことに不満を感じました。少なくとも、FFMPEGからVFR(V B Rではなく)出力を有効にする方法に関する他の人々の質問に答えるつもりでした。

その答えは、奇妙な名前の-vsyncオプションです。いくつかの異なるオプションに設定できますが、必要なオプションは '2'またはvfrです。manページから:

-vsync パラメーター
ビデオ同期方法。互換性の理由から、古い値は数値として指定できます。新しく追加された値は、常に文字列として指定する必要があります。

  • 0、パススルー

    • 各フレームは、そのタイムスタンプとともにデマルチプレクサからマルチプレクサに渡されます。
  • 1、CFR

    • 要求された一定のフレームレートを正確に達成するために、フレームが複製およびドロップされます。
  • 2、vfr

    • フレームは、2つのフレームが同じタイムスタンプを持つことを防ぐために、タイムスタンプとともにパススルーされるか、ドロップされます。
  • 落とす

    • パススルーとしてすべてのタイムスタンプを破棄するため、フレームレートに基づいてマルチプレクサで新しいタイムスタンプを生成します。
  • -1、自動

    • マルチプレクサの機能に応じて1〜2を選択します。これがデフォルトの方法です。

この後、マルチプレクサによってタイムスタンプがさらに変更される可能性があることに注意してください。たとえば、フォーマットオプションavoid_negative_tsが有効になっている場合。

-mapを使用すると、タイムスタンプを取得するストリームを選択できます。ビデオまたはオーディオを変更せずに残し、残りのストリームを変更していないストリームに同期できます。

しかし、私は誰もが持っていると思われる「サブ質問」に答えるだけのコメントを投稿するのに十分な評判を得ていません。しかし、私は正直にあまり楽観的ではなかったというアイデアをいくつか持っていました...しかし、最初に試したものは実際に働きました。そう。

もちろん、必要な最大フレームレートに置き換える場合は、-vsync 2オプションとオプションを組み合わせる必要が-r $maxfpsあります$maxfps!そしてそれは動作します!ソースファイルからフレームを複製しませんが、ファイルが最大フレームレートを超える原因となるフレームをドロップします!

デフォルトでは-r $maxfps、一定のフレームレートを達成するために、-vsync 2それ自体でフレームを複製/ドロップさせ、PTS値に実際に影響を与えずにフレームを直接引き込むように見えます。

これについては楽観的ではありませんでした。なぜなら-r $maxfps、それが一定のフレームレートになることは既に知っていたからです。正直なところ、エラーが発生するか、最初または最後のいずれかまたはいずれかが発生した場合はそれに従うだけです。私が望んでいた通りに動作するという事実は、FFMPEG開発者に非常に満足しています。

これがあなたまたはあなたがこれを知る必要がなくなった後に他の誰かに役立つことを願っています。


3
-copyts同様に役に立つかもしれません
-rogerdpack

1

MAXIMUM値を使用して可変フレームレートを指定し、libx264が適切と思われるフレームレートを下げるようにします。ここでのアイデアは、拡張された静止フレームのようなものがあるときに余分な圧縮を取得することです

私の理解では、これはおそらく比較的不器用な方法かもしれませんが、いくつかの複雑で直感に反する理由のために望ましくありません

x264ストリームにはフレームレートがありますが、フレームレートはコーデックの問題よりもコンテナレベルの問題です。

パススルーVFRエンコードでは、フレームレートがどのフレーム/時間を超えているかを詳細に説明するテキストファイルが本質的に存在し、ソースのエンコードでは、tcfile-inやtcfile-outなどの関数がタイムスタンプをエンコードに渡します、レートの場所をマッピングし、ソースからの主観的な一貫性を維持します。

低フレームレートのアイデアは論理的なものですが、いくつかの理由でうまくいきません。x264はいくつかの機能を備えたVFRに対応していますが、ファイルサイズを小さくするために(多くのビットレートコントロールに類似した方法で)モーションに関してフレームレートを変化させる分析機能はないと思います。

ソースも問題です:VFRソースはデフォルトでフレームの変動性を保持しますが、明らかにCFRファイルを可変ビットレートでエンコードすることは(時にはテレシネが必要な場合は良い考えですが)単純に同じCFRを生成します。

つまり、おそらくビットレートを手動で書き換える(つまり、遅いシーンのタイムスタンプをファイルに多重化する)か、avisynthのdup、dedup、exactDedupなどのフレーム間引きアルゴリズムを使用する必要があります。ビデオの動きが極端に低い場合、いくつかのフレーム(半分でも)がスローされます。問題は、これらのアルゴリズムが高度ではなく、最適なエンコードに寄与するものに関して「実際の」映像では適切な選択を行わないことです。

また、IフレームやBフレームなどを含むフレームを削除すると、時間の経過とともに利用できる詳細の量が減り、モーションが「ステッピー」に見え、他の基本的なビデオパラメーターに干渉し、エイリアシングなどのアーティファクトが発生します。

また、量子化器の動作方法により、x264はこれらの動きの少ないシーンで実際にビットレートを不均衡にさらに低下させます。同一の画像のスライドショーがない限り、動きがあり(粒子やその他のアーティファクトのみ)、ビットレートの大幅な変更なしでは見られない品質の低下が生じます。

そして最後に、あなたが望むことをする多くのオプションがない理由は、x264が一時的な圧縮(部分的なフレームの変更を記録する)だけを使用してビットレートを管理するのに本当に優れているからです。1/2フレームレートに移行しても、ファイルサイズは半分になりません。10%は、おそらく低モーションまたはアニメーションから期待される現実的なゲインです。

要するに、静的なシーンのビットレートを落としても、ファイルサイズにはほとんど影響しませんが、ビデオ編集ソフトウェアとの非互換性は言うまでもなく、品質と同期の問題が多数追加されます。

デシメータを試したい場合は、levelsオプションを使用して、新しい最大フレームレートを制限することができます。各オプションは、最大解像度とフレームレートを指定します。残念ながら、プロファイルを使用して必要なフレームレートを得るには、おそらく非常に低い解像度で作業する必要があります。レートを完全に、または高すぎると思われるフレームレートを修正するために、手動でレートを編集することに戻ります。いずれにせよ、tcfileが保存されているときにエンコーディングプロセスの後に変更が行われた場合、サウンドを新しいフレームレートと同期させるにはジャグリングが必要になります。

重要なことは、多くのビットレート設定を最適化することに時間を費やすことで、ファイルサイズの管理方法が大幅に向上し、ビデオの品質が向上することです。元のFPSを保存することは、ブロードキャストまたはメディアの標準を目的としない限り、おそらく最良のアイデアです。プレーヤーは、(エディターとは異なり)可変ビットレートを十分に再生できます。ビデオ内のフレームが多いほど、フレーム間の動きの変化が小さいため、再生がスムーズになり、ファイルサイズが小さくなる可能性があります。

エンコードのこの混乱を招く側面を支援する標準情報およびフォーラムのディスカッションへのリンク集を以下に示します。

- AviSynthのデシメーション・ツール

- FPSと-rスイッチ
- x264の一般的な(tcfile、FPS)
- タイムコードファイル規格
- レベルとプロファイル
- ショート、明確なCFR / VFRの設定の概要( "フレームレート"を参照)

doom9、videohelp、&c理論的議論
1 2 3 4 5 6 7

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.