19

私は現在、ユーザーが任意の形式 (.avi、.mov など) でアップロードしたビデオを受け入れ、Flash ベースのプレーヤーで再生するためにそれらを flv に変換する必要がある Web アプリケーションに取り組んでいます。

このサイトは OpenCms ベースであるため、最適なソリューションは OpenCms 用の既製のプラグインで、バックグラウンドでトランスコード操作を実行して動画をアップロードおよび再生できるようにすることですが、トランスコードを実行するための Java クラスのセットだけでも十分です。アップロードフォームと再生部分を自作できました。

4

11 に答える 11

21

ビデオのトランスコードに使用するFFmpegという優れたオープン ソース ツールがあります。私は PHP を使用してシェル呼び出しを行い、それを実現していますが、Java でうまく動作させるのが難しすぎるとは想像できません。(たぶん、これはあなたにとって良い出発点になるかもしれません。)

私はインスタレーションに毎週 30 以上のギグ バッチを供給しており、常に高品質の素材として提供されています。私にとって唯一難しいのは、さまざまなビデオ形式を処理できるようにコンパイルすることです。明るい面では、これは私が必要とする重労働を私に提供してくれました。

于 2009-02-02T10:32:32.580 に答える
20

Xugglerを使用して Java でビデオをエンコードできます。Xugglerは、FFmpeg の C コードをバックグラウンドでネイティブに使用する Java API です。

于 2009-12-11T22:39:26.080 に答える
11

flv ファイルをホスト、トランスコード、およびストリーミングする場合 (およびビデオ トランスコーディング アプリケーションを購入したくない場合) には、基本的に 2 つの選択肢があります。FFMpeg/MEncoder を呼び出すか、外部 Web サービスを使用することができます。サイトに YouTube 動画を埋め込むことを許可することで、問題を完全に回避することもできます。

「ローカル FFMpeg ルート」に進む場合は、単純に ProcessBuilder を使用し、コマンドラインを作成して FFMpeg を実行することをお勧めします。こうすることで、何を実行するかを完全に制御し、JNI を使用するのは絶対に悪夢であり、OS 固有のコードをアプリから除外します。FFMPeg には、ほぼすべてのプラットフォーム用の機能がすべて揃っています。すでにサーバー上にある可能性は十分にあります。

「ローカル FFMペグ」ルートの良い点は、追加のホスティングに料金を支払う必要がなく、すべてがローカルで実行されていることです。Flash Player で実際に再生できる flv を作成するためにFFMpeg を使用して落とし穴のいくつかについて話している StackOverflow の質問が他にもいくつかあります。

必要なセットアップが少ないため、Web サービス ルートは便利です。私はHey!Watchを使用していませんが、有望に見えます。PandaStreamはセットアップが簡単で、うまく機能します。さらに、すべてのビデオを S3 で追加の手間をかけずに取得できます。

于 2009-02-25T16:55:02.633 に答える
4

これは少し的外れかもしれませんが、Panda Streamはあらゆる種類のビデオ エンコーディングの問題に対する非常に有用なソリューションであることがわかりました。

動画ファイルを Panda を実行している Amazon EC2 インスタンスにアップロードするだけで、必要な形式と品質に動画がエンコードされ、完了時にアプリケーション サーバーに詳細を含むコールバックが発行されます。その後、バンドルされている Flash Video プレーヤーまたは独自のプレーヤーを使用して、サイトでビデオを再生できます。

これは非常にスケーラブル (Amazon EC2 & S3 のおかげ) であり、独自のソリューションと比較して費用対効果が高く、カスタマイズ可能なソリューションです。

強くお勧めします。

アップデート:

Panda のアーキテクチャは次のとおりです。

パンダ ストリームのアーキテクチャ
(ソース: pandastream.com )

  1. ページは iframe またはポップアップで Panda のアップロード フォームを表示します
  2. AJAX 進行状況バーを使用したビデオのアップロード
  3. エンコード完了時の API コールバック
  4. ユーザーにストリーミングされたビデオ
于 2009-02-24T12:01:10.197 に答える
3

MPlayer で使用されるmencoderと呼ばれるオープン ソース ライブラリがあり、FLV や他の多くのコーデックをサポートしています。

作成方法を確認できるJava GUIがあります

これも役立つ可能性があります

コンソールから呼び出されていない例を見つけることができないようですので、役に立たないかもしれません。:S

編集this question も見てください。

于 2009-02-24T11:32:06.117 に答える
1

ある形式から別の形式へのファイルのエンコードは、正しく行うために多くの開発時間を要します。そのため、これらの偉業を達成できるデコーダー/エンコーダーはほとんどありません。よく知られていて最も使用されているのはffmpegとmencoderです。

調べたいのは、実行しているプラ​​ットフォーム(Windows / Mac OS X /その他のUNIX)に、ファイルをデコードして再エンコードできる、使用可能なAPI呼び出しの基礎セットがあるかどうかを確認することです。 。WindowsにはDirectShowがあり、MacOSXにはQuicktimeがあります。ただし、Javaを使用してこれらのAPIにアクセスできるかどうかはわかりません。

FFMpegにはJavaラッパーが利用可能です:FFMPEG Java、そしてffmpegのC++ラッパーに利用可能なJNIがあるFOBSもあります。私が最後にjFFmpegを見つけましたが、Googleで見つけたいくつかの投稿は、プロジェクトがもう生きていない可能性があることを示唆しています。

あなたの最善の策は、mplayerまたはffmpegのmencoderです。Ffmpegは別のバイナリとしてインストールし、デフォルトの「シェル」コマンドを使用して他のコードから呼び出すことができます。ただし、コマンドを実行できない場合は、MarkRobinsonが提案したようなオンライン変換Webサイトの使用を検討する必要があります。

于 2009-02-23T10:34:56.480 に答える
1

Java でやりたい場合は、Xuggle を使用すると非常に簡単に実行できます。

彼らはすべてを行う方法を説明する素晴らしいウェブサイトを持っています

ドキュメントはこちら: http://build.xuggle.com/view/Stable/job/xuggler_jdk5_stable/javadoc/java/api/index.html

そして、あなたが望むことを行う方法を説明する優れたチュートリアルはここにあります: http://blog.xuggle.com/2009/06/05/introduction-to-xuggler-mediatools/

これらは、単純なトランスコーディングである最初のチュートリアルで必要なことを行うための簡単な方法を提供します。

flv へのエンコードには問題なく機能することがわかりました。舞台裏ではffmpegを使用しているため、ffmpegでつまずくものはすべてxuggleでも失敗します。

関連するサンプル Java コードは次のとおりです。

 // create a media reader
 IMediaReader reader = ToolFactory.makeReader("videofile.flv");

 // add a viewer to the reader, to see the decoded media
 reader.addListener(ToolFactory.makeWriter("output.mov", reader));

 // read and decode packets from the source file and
 // and dispatch decoded audio and video to the writer
 while (reader.readPacket() == null)
   ;

http://wiki.xuggle.com/MediaTool_Introduction から入手したもの

完全に機能する clojure コードが必要な場合は、ここにあります :)

(import '(com.xuggle.mediatool ToolFactory))
(import '(com.xuggle.mediatool IMediaDebugListener IMediaDebugListener$Event))

    (defn readerRecurse
      "calls .readPacket until there's nothing left to do2"
      [reader]
      (if (not (nil? (.readPacket reader))) ; here .readPacket actually does the processing as a side-effect.
        true                                   ; it returns null when it has MORE ro process, and signals an error when done... 
        (recur reader)))


    (defn convert
      "takes video and converts it to a new type of video"
      [videoInput videoOutput]
      (let [reader (ToolFactory/makeReader videoInput)]
        (doto reader
          (.addListener (ToolFactory/makeWriter videoOutput reader))
          (.addListener (ToolFactory/makeDebugListener (into-array [IMediaDebugListener$Event/META_DATA]))))
        (readerRecurse reader)))

今あなたがしなければならないことは、次のようなものです:

(convert "/path/to/some_file.stupid_extention" "/path/to/awesome.flv")

これで完了です。

于 2010-04-09T04:43:23.430 に答える
1

ビデオのトランスコーディングに関しては、FFMpeg が最適です。

ffmpeg の Java ラッパーを使用できます - http://fmj-sf.net/ffmpeg-java/getting_started.php http://sourceforge.net/projects/jffmpeg/

于 2009-02-24T10:58:43.093 に答える
0

はい、ffmpeg はこの作業に最適です...私たちは ffmpeg を使用して長い間ビデオを変換しており、すべてのビデオ形式で動作します..多数のオプションがあります..

于 2010-09-16T09:25:12.877 に答える
0

また、Panda をホストされたサービスとしてリリースしたことにも興味があるかもしれません。これにより、セットアップとスケーリングが容易になります :)

http://pandastream.com

于 2010-04-26T15:44:20.640 に答える