使用ffmpeg生成视频以使用JavaFX播放

时间:2015-05-25 11:19:52

标签: java video javafx ffmpeg

人们总是说发布一个新问题所以我发布了一个与Generate video with ffmpeg for JavaFX MediaPlayer相关的新问题

我使用的图片可以从这里下载https://www.dropbox.com/s/mt8yblhfif113sy/temp.zip?dl=0。这是一个带有18k图像的2.2GB zip文件,仍在上传,可能需要一些时间。图像是3D对象的切片。我需要每10ms到20ms显示一次图像。我尝试使用Java,但是速度不能超过30ms +所以现在我正在尝试生成一个能够以我想要的速度显示图像而不用担心内存或CPU能力的视频。

人们将使用我的软件切片对象,然后生成稍后播放的视频。播放器可以在便宜的笔记本电脑上运行,也可以在Raspberry Pi上运行。我需要确保切片器可以在任何操作系统上运行,并且人们不需要安装太多额外的东西来使其工作。如果我可以只包含下载应用程序所需的所有内容,那将是最好的。

我也发布在这里 https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=2474&sid=4f7a752f909202fbec19afc9edaf418c

我使用的是Windows 7,我安装了VLC。 ffmpeg版本是

ffmpeg version N-72276-gf99fed7 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.2 (GCC)

我还尝试了在链接问题上发布的命令行

这一行产生了视频而JavaFX没有任何错误

ffmpeg -f image2 -r 50 -i "Mandibular hollow 1 micron.gizmofill%d.gizmoslice.jpg" -s 1638x1004 -vcodec mpeg4 -qscale 1 -f mp4 Timelapse.mp4

enter image description here

这一行也产生了视频,但是JavaFX有一个错误:"引起:MediaException:MEDIA_UNSUPPORTED:无法识别的文件签名!"

ffmpeg -f image2 -r 50 -i "Mandibular hollow 1 micron.gizmofill%d.gizmoslice.jpg" -s 1920x1080 -vcodec mpeg4 -qscale 1 Timelapse.avi

enter image description here

我也尝试过这两个传递编码。它产生了视频,但没有播放

ffmpeg -r 50 -i "Mandibular hollow 1 micron.gizmofill%d.gizmoslice.jpg" -s 1638x1004 -r 50 -b:v 1550k -bt 1792k -vcodec libx264 -pass 1 -an combined50.flv && ffmpeg -y -r 50 -i "Mandibular hollow 1 micron.gizmofill%d.gizmoslice.jpg" -s 1638x1004 -r 50 -b:v 1550k -bt 1792k -vcodec libx264 -pass 2 -vpre hq -acodec libfaac -ab 128k combined50.flv

这是我的JavaFX代码。正如您所看到的,我尝试了Oracle视频,并且工作正常。

public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private MediaView mediaView;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");

//        final File f = new File("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv");
        final File f = new File("C:/Users/kobus/Dropbox/JavaProjects/Gizmetor/temp/Timelapse.avi");

//        "C:/Users/kobus/Dropbox/JavaProjects/Gizmetor/temp/combined50.avi.flv"
//        http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv

        Media media = new Media(f.toURI().toString());
//        Media media = new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv");
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaPlayer.setAutoPlay(true);

        mediaPlayer.play();
        mediaView.setMediaPlayer(mediaPlayer);
        label.setText("Hello World!");
        System.out.println(mediaPlayer.isAutoPlay());

//        mediaView
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}

1 个答案:

答案 0 :(得分:1)

您需要以JavaFX可以播放的格式对视频进行编码。

查看list of supported media types