44

非常に単純な問題のように見える問題がありますが、予想よりもはるかに難しいことが証明されています。問題は次のとおりです。

番号が付けられたフレームで構成されるかなり大きなイメージ シーケンスがあります (Maya からの出力です)。画像は現在 Targa (.tga) 形式ですが、必要に応じて PNG やその他の任意の形式に変換できます。重要なことは、アルファチャンネルがあることです。

私がやりたいことは、プログラムでそれらをビデオ クリップに変換することです。形式は特に問題ではありませんが、ロスレスでアルファ チャネルが必要です。Quicktime コンテナ内の圧縮されていないビデオは、おそらく理想的です。

私の最初の考えは ffmpeg でしたが、ほとんどの 1 日を無駄にした後では、アルファ チャネルがまったくサポートされていないようです。何かが足りないか、基礎となるlibavcodecがそれをしていないだけです。

それで、ここで正しい方法は何ですか?ffmpeg のようなコマンド ライン ツールは便利ですが、Windows で実行され、スクリプトから呼び出すことができるソリューションであれば問題ありません。

注: ビデオにアルファ シャネルを使用することは、実際にはそれほど珍しいことではなく、別のビデオ クリップや静止画像の上に合成する場合に非常に便利です。私の知る限り、非圧縮ビデオ、Quicktime Animation コーデック、および Sorenson Video 3 コーデックはすべて透明性をサポートしており、H.264 も同様にサポートしていると聞いています。私たちが実際に話しているのは 32 ビットの色深度だけであり、これはかなり広くサポートされています。Quicktime .mov ファイルと Windows の .avi ファイルの両方で処理できますが、おそらくそれ以上のファイルも処理できます。

Quicktime Pro は、イメージ シーケンスを 32 ビットの .mov ファイルに変換できます。エクスポートを押し、色深度を「Millions of Colors+」に変更し、アニメーション コーデックを選択し、品質を 100 まで上げると、アルファ シャネルを使用して可逆圧縮されたビデオが作成され、コーデック以降のほぼすべての場所で再生されます。はバージョン 1.0 から Quicktime に含まれています。問題は、Quicktime Pro にコマンドライン インターフェイスがまったくないことです (少なくとも Windows では)。ffmpeg は、Quicktime アニメーション コーデック (qtrle と呼ばれる) を使用したエンコードをサポートしていますが、24 ビットのビット深度しかサポートしていません。

問題は、アルファ チャネルをサポートするビデオ形式を見つけることではありません。Quicktime アニメーションが理想的ですが、圧縮されていないビデオでも動作するはずです。問題は、それをサポートするツールを見つけることです。

4

4 に答える 4

35

はい、ffmpeg は確かにビデオ ファイルのアルファ チャネルをサポートしています。ffmpeg のすべてのコーデックがアルファ版をサポートしているようには見えません。.MOV ファイルのモーション PNG は、アルファの 1 つの適切な組み合わせです。

アルファ付きの画像をアルファ付きのビデオにエンコード/インポートするには、次を試してください。ffmpeg -i %d.png -vcodec png z.mov

Quicktimeはそれを再生します。

アルファ付きのビデオをアルファ付きの画像にデコード/エクスポートするには、次を試してください。ffmpeg -i z.mov -f image2 export2\%d.png

それらを「export2」というディレクトリにエクスポートしたことに注意してください。%d 個のパーツは必ず残しておいてください。これらのコマンドは、Windows システムでそのまま機能します。Linux/Mac ユーザーは、通常どおり引用符を追加し、一部の \ を / に置き換える必要がある場合があります。

于 2010-12-07T00:02:01.507 に答える
23

このトピックは少し古いことは知っていますが、とにかく投稿しています。

Quicktime Animation (RLE) または FFVHUFF/HUFFYUV を使用した FFMPEG で十分です。

  • ffmpeg -i yoursequence%d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i yoursequence%d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i yoursequence%d.png -vcodec huffyuv movie_with_alpha.avi

透明度 (アルファ チャネル) が保持されたビデオ ファイルが得られます。

On2-VP6 バリエーション (まだ WebM-VP8 ではない) がアルファを処理できるとも聞いていますが、手元にコーデックがありません。

これも機能します。- ffmpeg -i yoursequence%d.png -vcodec png movie_with_alpha.mov

于 2012-10-18T09:17:21.930 に答える
9

この質問にたどり着き、欲求不満で壁に頭をぶつけている Web 開発者の場合…透過的な WebM ビデオを作成することは可能ですが、現時点では、ソースから ffmpeg と必要なライブラリをコンパイルする必要があるかもしれません。

レンダリングされた Blender ビデオを Web サイトに表示したいが、透過性は維持したかった。最初のステップは、Blender の出力を個別の PNG ファイルとしてレンダリングすることでした。その後、私は ffmpeg にこれらの PNG ファイルを 1 つのビデオに変換するよう強制しようとかなりの時間を費やしました。基本的なコマンドは単純です:

ffmpeg -i input%04d.png output.webm

このコマンドは、すべての PNG をファイル名とともにロードし、input0000.pngそれらinput9999.pngをビデオに変換します。すぐに透明感がなくなりました。出力を調べてみると、ffmpeg が非透過形式を選択するのに役立つことがわかりました。

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

この時点で、ffmpeg を最初から再コンパイルする必要があるかもしれないことに気付きました。他のいくつかのツールと格闘しましたが、最終的には ffmpeg に戻りました。最新のソースから libvbx と ffmpeg をコンパイルした後、うまくいきました。

于 2014-01-29T18:13:19.497 に答える