Не могу закодировать видео с помощью Xuggler - PullRequest
2 голосов
/ 30 ноября 2011

Я пытаюсь создать простое приложение с Xuggler, которое должно кодировать последовательность изображений в видео. Я установил xuggler, как описано на официальном сайте. Вот пример кода (который я действительно нашел на вики-сайте Xuggler)

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xuggle.mediatool.IMediaViewer;
import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;
import com.xuggle.xuggler.ICodec;

import static com.xuggle.xuggler.Global.DEFAULT_TIME_UNIT;
import static java.util.concurrent.TimeUnit.SECONDS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;


public class Test {

    private static final Logger log = LoggerFactory.getLogger(Test.class);
    {
        log.trace("<init>");
    }

    public static void main(String[] args) {

        final long duration = DEFAULT_TIME_UNIT.convert( 3, SECONDS );

        final int videoStreamIndex = 0;
        final int videoStreamId = 0;
        final long frameRate = DEFAULT_TIME_UNIT.convert(15, MILLISECONDS);
        final int width = 320;
        final int height = 200;

        long nextFrameTime = 0;

        final IMediaWriter writer = ToolFactory.makeWriter("/out.mov");

        writer.addVideoStream(videoStreamIndex, videoStreamId, 
                      width, height);

        while ( nextFrameTime < duration )
            {
                BufferedImage frame = new BufferedImage( 320, 200, BufferedImage.TYPE_INT_RGB );
                Graphics2D gr = (Graphics2D) frame.getGraphics();
                gr.setColor(Color.RED);
                gr.drawLine(0, 0, 200, 200);
                writer.encodeVideo(videoStreamIndex, frame, nextFrameTime, 
                       DEFAULT_TIME_UNIT);
                nextFrameTime += frameRate;
            }

        writer.close();

    }

}

После запуска у меня возникло исключение:

Exception in thread "main" java.lang.UnsupportedOperationException: No converter "null" found.
    at com.xuggle.xuggler.video.ConverterFactory.createConverter(ConverterFactory.java:313)
    at com.xuggle.mediatool.MediaWriter.convertToPicture(MediaWriter.java:967)
    at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:812)
    at Test.main(Test.java:48)

Не могли бы вы посоветовать мне что-нибудь для решения этой проблемы? Спасибо

1 Ответ

6 голосов
/ 30 ноября 2011

Xuggler жалуется, что не может найти конвертер для BufferedImage.

Создайте BufferedImage с BufferedImage.TYPE_3BYTE_BGR вместо BufferedImage.TYPE_INT_RGB

См. http://wiki.xuggle.com/Encoding_Video_from_a_sequence_of_Images для получения дополнительной информации

...