web-dev-qa-db-ja.com

FFMPEG / AVCONVを使用したユーザー生成クロマキー合成ビデオ

ユーザーが2つのビデオをWebサイトにアップロードできるシステムを作成したいと思います。そのうちの1つはバックグラウンドでブルースクリーンがあり、WebサイトはAVCONV(または同様のもの)を使用して、 (クロマキー テクニック(別名ブルースクリーニング)。

AVCONVはこのように使用できますか?

この投稿によると on SO静止画像はChromeバックグラウンドにキー入力できます。ただし、同じことができます。ビデオ?

また、2つのビデオをマージする前に、同じ長さとフォーマットにする必要があるかどうかも知りたいですか?このようなサービスを提供できるようにするために検討すべき他の技術的な考慮事項はありますか?

前もって感謝します。

2
Jimmery

注:この回答は、FFmpegがクロマキーイングを実行する機能を取得する前に投稿されました。以下の他の回答を参照してください。

AVconvもFFmpegも現在これを行うことはできません-それは彼らが行うことができない1つの主要なビデオ処理タスクです。

これらのツールcan別のビデオまたは画像の上に透明な背景を持つ画像またはビデオをオーバーレイします-これは、あなたがリンクしたSO質問です。ただし、透明な背景は、透明性をサポートするビデオ形式である必要があります(ほとんどはサポートしていません)-私はqtrle(Appleのアニメーションコーデック)を使用しますが、実際のクロマキーイングを行うことはできません(特定の色が透明)。

おそらくavconvとImageMagickを含む回避策を使用することもできますが、それはかなりCPUを集中的に使用することになり、結果がどれほど良いかはわかりません。次のことを行う必要があります。

  1. クロマキーを使用するビデオをavconvで個々のフレームに変換します
  2. ImageMagickの変換(またはmogrify)ツールを使用して、個々のフレームのクロマキーイングを実行します
  3. Avconvでフレームをステッチして戻し、背景ビデオの上に配置します

パイプを使用してプロセスを簡略化できる場合があります。

フレームを抽出するには(00001.png、00002.pngなどのようなファイルを生成します):

avconv -i input.mp4 %05d.png

ImageMagickを実行した後、それらをつなぎ合わせてバックグラウンドビデオの上に配置するには:

avconv -f image2 -r 25 -i %05d.png -i background.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4

-r 25は25のフレームレートを提供します。別のフレームレートが必要な場合は、別の数値を使用してください。元の入力ビデオと同じフレームレートを使用していることを確認してください。元の入力からオーディオを取得する場合は、

avconv -f image2 -r 25 -i %05d.png -i background.mp4 -i input.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -map 2:a -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4

AVconvの一部のバージョン(Ubuntuリポジトリのバージョンなど)は、フィルターグラフをサポートしていないことに注意してください。その場合は、avconvまたはffmpegの新しいバージョンにアップグレードしてください。

ステージ2に関しては...実際にそれを行う方法はわかりませんが、ImageMagick canクロマキーイングを行うことは知っています。役立つと思われるリンクをいくつか示します。

http://www.imagemagick.org/Usage/photos/#chroma_key
http://www.imagemagick.org/discourse-server/viewtopic.php?t=14394
http://tech.natemurray.com/2007/12/convert-white-to-transparent.html

人々があなたに与えるサンプル間の照明などの違いのために、あなたは取り除くために青の正確な色合いを検出するために何かを使わなければならないでしょう。おそらくffmpegを使用してサムネイルを作成し、次にスポイトを使用して背景色を選択するなど、ユーザーに任せる必要があります。

2
evilsoup

[〜#〜] mlt [〜#〜] を使用してこれを行うことができます

melt https://archive.org/download/IMB_SF_R35_C8/IMB_SF_R35_C8_512kb.mp4 in=400 \
    -track https://archive.org/download/IMB_SF_R19_C9/IMB_SF_R19_C9_512kb.mp4 in=450 \
    -filter chroma key=0x00ff0000 variance=0.45 \
    -transition composite

これにより、犬のバックグラウンドビデオとグリーンスクリーンクリップが、上に合成された2番目のトラックとして再生されます。クロマキー(多少の差異がある緑に設定)を使用して、緑の領域にアルファを適用し、合成された背景が透けて見えるようにします。 in=XXXは、使用されているビデオクリップの主要なゴミを切り捨てるだけです。

3
rectalogic

クロマキーは、カラーキーオプションを使用する前に、バージョン3.0からffmpegで使用できます。

ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4

ffmpegv2.8以降のカラーキー用

 ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]colorkey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp

これらの両方が私のために働いています。

1
Ravikant Tiwari