web-dev-qa-db-ja.com

C#で画像からビデオを作成するための作業方法

誰かが一連の画像ファイルからビデオを作成するための既知の信頼できる方法を持っていますか?質問を投稿する前に答えを検索しないために私を改造する前、そして「FFMPEGを使用してください」のような単純なメッセージを発する前に、このメッセージの残りを読んでください。

私はビデオを作成しようとしています。一連の画像(.jpg、.bmpなど)から広くサポートされている限り、どの形式でもかまいません。私のプラットフォームはWindowsServer 2008、64ビットです。 C#プログラム内からビデオを作成できればそれは素晴らしいことですが、一連の画像ファイルをディレクトリに書き込んでから、外部プログラムを起動してそれらの画像からビデオを作成することを嫌がりません。

唯一の制約は次のとおりです。WindowsServer2008システムで動作し、スクリプト可能である必要があります。つまり、オペレーターの介入を必要とするGUIプログラムはありません。

StackOverflowで同様の質問をいくつか見つけ、いくつかの解決策を試しましたが、すべてさまざまな程度のフラストレーションがあり、成功のようなものはありませんでした。

FFMPEGは素晴らしいプログラムのように見えます。 Linuxではそうかもしれません。ダウンロードした2つのWindowsビルドが壊れています。このコマンドラインを考えると:

  ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi

ビルドの1つがイメージを読み取り、データ実行防止のためにクラッシュします。もう1つは最初のファイルを読み取り、「ファイルjpeg /image2.jpgに適したコーデックが見つかりません」というエラーメッセージを出力します。役に立った、それ。いずれにせよ、FFMPEGはWindowsでは初心者のようには見えません。

以前の投稿に対する1つの回答をお勧めします スプライサー 。それはかなり良いコードのように見えます。サンプルをコンパイルして実行しようとしましたが、ファイルが見つからないという不可解なエラーメッセージが表示されました。 COMクラスが登録されていないようです。私は何かをインストールする必要があると思います(DirectShow、多分、それはすでにインストールされていると思いましたか?)。必要なものによっては、サーバーへのインストールを正当化するのに苦労するかもしれません。 (「何ですか?なぜサーバー上でそれが必要なのですか?」)

別の回答は、Code Projectの AviFile ライブラリを提案しました。これは非常に単純に見えます。WindowsAviFileサブシステムのラッパーです。パッケージが作成するAVIファイルを除いて、すべてのフレームが含まれているように見えますが、Windows MediaPlayerでAVIを再生すると最初のフレームのみが表示されます。そうですね、圧縮されたビデオを作成しようとすると、プログラムは例外をスローします。

そのため、Windowsシステムで、.NET APIを使用するか、.NET APIを使用して、一連の画像からAVIまたはその他の一般的なビデオファイル形式を作成するという、信頼できる優れた方法があるかどうか疑問に思っています。外部プログラム。何か助けはありますか?

18
Jim Mischel

しばらく作業してx264とVideoLanを確認した後、Splicerに戻りました。不可解なエラーメッセージは私のコードのエラーが原因であることが判明しました。

Splicerは私が望むことをするようです:一連の画像からプログラムでビデオを作成します。

回答してくれたすべての人に感謝します。

10
Jim Mischel

VideoLanを使用できますので、お勧めします。

私は、VideoLanが次の2つのことを行うC#アプリケーションを直接経験しました。

  1. C#アプリケーションにVLCビューアーを埋め込む(VLCビューワーには3〜4個のC#「ラッパー」があります)。
  2. コマンドライン引数を送信して、別のプロセスでvlc.exeを使用する。

VideoLanにコマンドラインインターフェイスがあるという事実は素晴らしいことです。また、VLCは、視覚要素を無効にするコマンドラインオプションをサポートしています。そのため、VLC GUIはポップアップせず、コマンドラインウィンドウもポップアップしません。したがって、C#アプリケーションでは、ビデオ関連の作業をVLCクライアントにファームアウトできます。 C#には、vlc.exeインスタンスを管理できるProcessクラスがあります。それはかなりきちんとした解決策になるでしょう。

6
Chris Holmes

Windowsでのビデオの処理(エンコードと再生)は本当の泥沼です。そして、.NETはまったく役に立ちません-あなたは常にPInvoking/COMと相互作用するネイティブAPIか、他の誰かが同じことをするために構築した.NETラッパーを使用するでしょう。

とにかく、私はそれを使用したとは言えませんが、良い賭けは videolanプロジェクトの一部であるx264ライブラリ のようです。これにより、PInvokeが可能な自己完結型のCライブラリが提供され、サーバーへのインストールやDirectShowのガベージについて心配する必要がありません。私が理解しているように、Flashで再生可能なH.264形式のビデオを生成します。

1
U62

私は mplayer のmencoderを使用して、Linux上のTGAファイルから次のようにAVI(コーデックmsmpeg4/mp3、デフォルトではWindows Media Playerで読み取り可能)を作成しました。

mencoder mf://*.tga -mf fps=25:type=tga \
  -audiofile /tmp/test.mp3 -oac copy \
  -of lavf -ovc lavc \          
  -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \
  -o /tmp/test.avi

MplayerにはWindowsバージョンがあることは知っています。

0
Tometzky