webdevqa.jp.net

透明な画像シーケンスをビデオに変換

本当に簡単な問題のように思えますが、予想よりもはるかに難しいことがわかっています。ここに問題があります:

番号の付いたフレームで構成されるかなり大きな画像シーケンスがあります(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 Animationコーデック(qtrleと呼ばれます)を使用したエンコードをサポートしていますが、24ビットのビット深度しかサポートしていません。

問題は、アルファチャネルをサポートするビデオ形式が見つからないことです。 Quicktimeアニメーションが理想的ですが、非圧縮ビデオでも機能するはずです。問題は、それをサポートするツールを見つけることです。

35
Cody Hatch

はい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ユーザーは、通常どおり引用符を追加し、\を/に交換する必要がある場合があります。

29
dentad

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

FFMPEGとQuicktime Animation(RLE)またはFFVHUFF/HUFFYUVを使用できます。

  • 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

18
satoc

この質問に到達し、イライラして壁に頭をぶつけているWeb開発者にとっては transparent WebM video を作成することは可能ですが、現時点ではソースからffmpegと必要なライブラリをコンパイルする必要があるかもしれません。

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

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

このコマンドは、ファイル名がinput0000.pngからinput9999.pngのすべてのPNGを読み込み、動画に変換します。透明性はすぐに失われました。出力をくまなく調べたところ、ffmpegは非透過形式を選択するのに役立ちました。

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

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

5
thirdender

私は、あなたや他の人がインタラクティブなフラッシュ作品でそのようなビデオを使いたいという強い可能性があると思います。これは、pngからのアルファチャネルを使用した非圧縮aviへのffmpegコンパイルを含む、そのためのチュートリアルです。

http://away3dtutorials.blogspot.com/2011/02/ffmpeg-to-compile-jpeg-to-video-with.html

1
user1006628

コーディ、

Quicktime SDK for Windows を使用して独自のコマンドラインユーティリティを作成できます。より高いレベルのQuicktime COM APIを使い続け、本当に必要な場合にのみC-APIを掘り下げることをお勧めします。

-ニック

0
Nick Haddad