13

元のビデオに比例して高さが常に512幅になるようにビデオをスケーリングしようとしています。スケーリングしたら、ウォーターマーク/オーバーレイをビデオに適用したいので、ビデオはスケーリングされますが、ウォーターマークは適用されません。

次のフィルターを使用して、これらのそれぞれを個別に達成できます。

規模

-vf "scale=512:-1"

透かし

-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

彼らは自分自身でうまく機能します。

ただし、2つを組み合わせようとすると、少し問題が発生します。

もちろん、両方をパラメーターとして使用しても機能しません。一方が他方をオーバーライドするからです。

私はもう試した:

-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

私の考えでは、スケールが最初に適用され、次に透かしが適用されると考えていましたが、エラーが発生するだけです

「映画」フィルターに指定された入力が多すぎます。

フィルタを開くときにエラーが発生しました!

次に、 を ; に変更します。をもたらしました:

単純なフィルターグラフ 'scale=512:-1; movie=watermark.png [透かし]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]' の入力と出力は 1 つだけではありません。

フィルタを開くときにエラーが発生しました!

フィルターチェーンでもっと何かをする必要があると思いますが、それを理解するのに苦労しています。

アイデアはありますか?

よろしくお願いします。

4

3 に答える 3

27

-filter_complexこのオプションは、スケール フィルタとオーバーレイ フィルタで使用できます。

ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v]scale=512:-1[bg];[bg][1:v]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output
  • 詳細については、スケールオーバーレイフィルターのドキュメントを参照してください。
  • 他の例のような映画ソース フィルターは必要ありません。
  • 元のオーディオを再エンコードする代わりにストリーム コピー(再多重化)する-c:a copy場合は、追加できます。これは、入力と出力のコンテナー形式が同じ場合に便利です。
  • この例では、ロゴを中央に配置します。その他の配置オプション:
    • 左上に 10 ピクセルのパディングを追加:overlay=10:10
    • 10 ピクセルのパディングを使用した右上:overlay=W-w-10:10
    • 右下に 10 ピクセルのパディングを追加:overlay=W-w-10:H-h-10
    • 左下に 10 ピクセルのパディングを追加:overlay=H-h-10:10
于 2012-06-07T18:07:12.873 に答える
16

@DiJuMxと@LordNeckbeardの両方に感謝します。どちらも、私を私の解決策に近づけてくれました。filter_complexオプションはまだ試していませんが、確かに単純に見えます。

私がうまくいくことがわかった解決策は次のとおりです。

-vf "movie=watermark.png [watermark]; [in]scale=512:trunc(ow/a/2)*2 [scale]; [scale][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

スケーリング時にビデオの高さのピクセル数が不均一になり、エンコードエラーが発生する可能性があるため、スケールの-1を置き換えたことに注意してください。

于 2012-07-19T17:27:50.780 に答える
0

From what I understand, this might work:

-vf "movie=watermark.png [watermark]; [in] scale=512:-1,[watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]"

You apply the scale filter to the input "[in]".

Unfortunately I don't have much experience with the filters on ffmpeg so I can't help further. Sorry

于 2012-07-18T17:29:49.107 に答える