4

無料の ScreenVideo (v1 または v2) 用の Java ビデオ エンコーダーを知っている人はいますか? ffmpeg には C++ バージョンがあり、Lee Felarca は AS3 で作成したことを知っています。しかし、私はJavaでそれを持ちたいと思っています。
AS3: http://www.zeropointnine.com/blog/assets_code/SimpleFlvWriter.as.txt

4

4 に答える 4

8

Xuggleライブラリは、実際には ffmpeg などのネイティブ ライブラリのラッパーである可能性がありますが、必要な機能を備えていると思います。

デスクトップのスクリーンショットを flv (mp4) にエンコードするサンプル コードのスニペットを次に示します。

 final Robot robot = new Robot();
 final Toolkit toolkit = Toolkit.getDefaultToolkit();
 final Rectangle screenBounds = new Rectangle(toolkit.getScreenSize());

 // First, let's make a IMediaWriter to write the file.
 final IMediaWriter writer = ToolFactory.makeWriter("output.mp4");

 // We tell it we're going to add one video stream, with id 0,
 // at position 0, and that it will have a fixed frame rate of
 // FRAME_RATE.
 writer.addVideoStream(0, 0,
     FRAME_RATE,
     screenBounds.width, screenBounds.height);

 // Now, we're going to loop
 long startTime = System.nanoTime();
 for (int index = 0; index < SECONDS_TO_RUN_FOR*FRAME_RATE.getDouble(); index++)
 {
   // take the screen shot
   BufferedImage screen = robot.createScreenCapture(screenBounds);

   // convert to the right image type
   BufferedImage bgrScreen = convertToType(screen,
       BufferedImage.TYPE_3BYTE_BGR);

   // encode the image to stream #0
   writer.encodeVideo(0,bgrScreen,
       System.nanoTime()-startTime, TimeUnit.NANOSECONDS);
    System.out.println("encoded image: " +index);

   // sleep for framerate milliseconds
   Thread.sleep((long) (1000 / FRAME_RATE.getDouble()));
 }
 // Finally we tell the writer to close and write the trailer if
 // needed
 writer.close();

このコードは、Xuggle Web サイトのこのチュートリアルからのものです。

より高度なエンコーディングについては、こちらの Xuggle Web サイトでもご覧いただけます。

ネイティブ ラッパーが必要な場合は、"IContainerFormat flv"の Web 検索を実行して、他のサンプル コードを探してください。

また、非常によく似た質問がすでにあります


更新:ネイティブ Java 実装

github の bigbluebutton プロジェクトからScreenVideoEncoder.javaを確認してください。

于 2010-10-01T19:16:04.397 に答える
2

Werner Randelshofer は純粋な Java スクリーン レコーダーを彼のブログに投稿し、親切にもソースを公開し てくれました欲しいです。

于 2011-08-01T22:12:43.307 に答える
0

BigBlueButton が実装していると思いますが、オープン ソース化されているかどうかはわかりません。そこを確認してください。

于 2010-10-02T04:40:21.053 に答える
0

ネイティブ コードを使用せずに純粋な Java で書かれた優れたものがあるかどうかはわかりません。ビデオのエンコーディングは非常に時間のかかる作業であるため、通常は C やアセンブラーなどの言語で「高速」なネイティブ コードで記述されます。ビデオ エンコーディングでは、多くの場合、速度を向上させるために特別な CPU および GPU 命令が使用されます。Java からはすべて利用できないため、プロダクション用のビデオ エンコーダーを Java で記述することはほとんど意味がありません。私があなただったら、ネイティブ ソリューションを採用して、それを JNI、JNA、または Swig (一般的な Java-to-native コネクタ) に埋め込むだけです。高い移植性が必要な場合 (例: 32 ビット Windows、64 ビット Windows、32 ビット Linux、64 ビット Linux)、これら 4 つのプラットフォーム用にこのネイティブ ライブラリをコンパイルし、JAR に埋め込むだけです。圧縮されていないビデオを作成する必要がある場合は、Java で簡単に作成でき、ネイティブ コードと同じくらい高速です。

于 2010-10-08T14:12:48.810 に答える