1

私はどこでも解決策を探していました!このウェブサイトおよび他のウェブサイトで。私はいくつかの興味深いものを見つけましたが、それらは私の問題を解決しませんでした. 説明します。

ビデオが 1 つあり、その各フレームを xuggler でグレーディングしています。すべてのフレームを取得したら、それらすべてをカラー アルゴリズムで編集します。また、オーディオを mp3 ファイルに保存します。

ここで、すべてのフレームからビデオを作成する必要があります。もちろん、このビデオは、フレームレートと持続時間と同じ特性を持つ必要があります。その後、オーディオをマージする必要があります。

前編はやったのですが、同じ特徴の動画の作り方がわかりません。私はこのコードに従っています:

http://www.javacodegeeks.com/2011/02/xuggler-tutorial-frames-capture-video.html

Xuggler でビデオをエンコードできない

しかし、スナップショットを取得し、奇妙なループを使用します。

for (int index = 0; index < SECONDS_TO_RUN_FOR * FRAME_RATE; index++)

正しい特性を設定する方法がわかりません。私はビデオについてすべてを知っているので、それは簡単なはずです! サイズ、フレームレート、フレーム数。

私のコード:

public static void main(String[] args) throws IOException {

    final IMediaWriter writer = ToolFactory.makeWriter(outputFilename);
    writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4, 
               720, 304);
    long nextFrameTime = 0;
    final long frameRate =25/1000;
    long startTime = System.nanoTime();
    while (indexVideo<1597) {
        BufferedImage videoImage = null;
        try {
            videoImage = getVideoImage();
        } catch (AWTException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        writer.encodeVideo(0, videoImage,nextFrameTime, 
                TimeUnit.MILLISECONDS);
        nextFrameTime += frameRate;

}
    writer.close();
}

private static BufferedImage getVideoImage() throws IOException, AWTException {

     File imgLoc = new File("D:/Gianfranco/Sample/"+indexVideo+".png");
     BufferedImage img;
    img = ImageIO.read(imgLoc);
    System.out.println(imgLoc.getName());
    indexVideo++;
    return img;

}

誰か助けてくれませんか?

4

3 に答える 3

1

コードを一目見ただけで、フレーム レートを設定していないことがわかります。使用している xuggler のバージョンはわかりませんが、ビデオ ストリームを追加するときにフレーム レートを設定します。

writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4, IRational.make(<frames>/<per second>), 720, 304);

もう 1 つの (おそらくより適切な) 方法は、元のビデオを開いて IMediaWriter を作成することです。

    IMediaReader reader = ToolFactory.makeReader("inputFile.mp4");
    IMediaWriter writer = ToolFactory.makeWriter("outputFile.mp4", reader);

または、最初のコンテナを取得してから、フォーマットを取得することで作成することもできます。これはストリーミング データに対してのみ行ったものであり、アーカイブ データに対しては行っていません。

于 2013-10-22T16:42:12.420 に答える
0

フレームレートのためにこれを試してください:

final long frameRate =DEFAULT_TIME_UNIT.convert(25, MILLISECONDS);
于 2013-04-02T13:06:48.400 に答える