zoukankan      html  css  js  c++  java
  • JavaFX桌面应用-视频转码工具(支持爱奇艺qsv转mp4)

    最近由于需要将在爱奇艺下载的视频(qsv)转化了mp4,用JavaFX开发一个视频转码工具,算是JavaFX开发的第一个应用吧。

    支持qsv转码mp4,理论上支持各种格式,仅测试了flv,qsv格式。
    文末有安装包获取途径

    ~ JavaFX桌面应用开发系列文章传送门 ~

    1. JavaFX-桌面应用开发系列文章汇总篇
    2. JavaFX桌面应用开发-HelloWorld
    3. JavaFX布局神器-SceneBuilder
    4. JavaFX让UI更美观-CSS样式
    5. JavaFX桌面应用-为什么应用老是“未响应”
    6. JavaFX桌面应用-MVC模式开发,“真香”
    7. JavaFX桌面应用-loading界面
    8. JavaFX桌面应用-表格用法

    1. 应用程序预览

    UI界面主要分为三个部分,顶部用于显示当前转码的视频信息,右侧按钮用于选择需要转码的视频,已经启动转码,中间是转码视频列表信息显示。

    2. UI 布局

    使用BorderPane进行布局,top为视频信息显示区,center为表格显示区

    <center>
        <TableView fx:id="table" prefHeight="187.0" prefWidth="600.0"/>
    </center>
    <top>
        <VBox>
            <children>
                <HBox alignment="CENTER" prefHeight="30.0">
                    <children>
                        <Label fx:id="info" alignment="CENTER" contentDisplay="CENTER" prefWidth="600.0"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER_RIGHT" prefHeight="30.0" spacing="10">
                    <children>
                        <Button text="选择..." onAction="#selectVideoHandler"/>
                        <Button text=" 启动 " onAction="#executeConvertHandler"/>
                    </children>
                </HBox>
            </children>
            <BorderPane.margin>
                <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
            </BorderPane.margin>
        </VBox>
    </top>
    

    3. 事件处理

    这里需要处理两个按钮的事件,即“选择”按钮和“启动”按钮的事件。

    a. “选择”事件处理

    当用户点击“选择”时,弹出视频文件选择框,支持同时选择多个视频。

    public void selectVideoHandler(ActionEvent actionEvent) {
        FileChooser fileChooser = new FileChooser();
        List<File> fs = fileChooser.showOpenMultipleDialog(App.stage);
        int idx = 0;
        if (fs != null && !fs.isEmpty()) {
            for (File f : fs) {
                if (f.exists() && f.isFile()) {
                    model.getTableList()
                        .add(TableColumnModel.fromWork(new Work(System.currentTimeMillis() + idx++, f.getAbsolutePath())));
                }
            }
        }
    }
    

    b. “启动”事件处理

    当用户点击启动按钮的时候,开始转码,并禁用启动按钮,防止多次启动转码。

    public void executeConvertHandler(ActionEvent actionEvent) {
        if (model.getTableList().isEmpty()) {
            new Alert(Alert.AlertType.INFORMATION, "没有转码任务,请选择视频进行转码。").show();
            return;
        }
        if (ffmpeg == null) {
            new Alert(Alert.AlertType.ERROR, "FFmpeg.exe Not Found.").show();
            return;
        }
        ((Button) actionEvent.getSource()).setDisable(true);
        new VideoConvertExecutor(ffmpeg, model.getTableList(), s -> Platform.runLater(() -> model.setInfo(s))).start();
    }
    

    4. 视频转码主流程

    视频转码采用FFmpeg工具进行转码,当视频进行转码时,将任务放入转码任务池,并启动转码;如果转码出现异常,则将异常信息放入model中显示在界面上,如果所有任务都已执行完成后退出转码线程。

    @Override
    public void run() {
        while (true) {
            Optional<TableColumnModel> opt = modelList.stream().filter(i -> !VideoConvertHolder.has(i.getId())).findFirst();
            if (opt.isPresent()) {
                try {
                    VideoConvertHolder.add(opt.get().getId());
                    convert(opt.get());
                } catch (Exception e) {
                    e.printStackTrace();
                    Platform.runLater(() -> opt.get().setMessage(e.getMessage()));
                }
            } else {
                break;
            }
        }
    }
    

    5. 应用打包、安装

    应用打包只需用InnoSetup生成打包配置iss,如何将应用打包成安装包即可,下面是安装界面:

    安装成功后,目录结构如下:

    6. 应用卸载

    如果需要卸载应用,只需要运行安装目录下面的unins000.exe即可。

    7. 转码效果

    经过转码后的qsv视频就可以采用视频播放工具播放了。

    =========================================================
    关注 公众号 “HiIT青年” 发送 “视频转码工具” 获取安装包。(如果没有收到回复,可能是你之前取消过关注。)

    HiIT青年
    关注公众号,阅读更多文章。

  • 相关阅读:
    xshel链接linuxl安装nginx
    nginx学习笔记
    sweiper做一个tab切换
    bootstrap中tab切换的使用
    pc页面自动缩放到手机端
    日程表
    页面嵌套iframe时,怎样让iframe高度根据自身内容高度自适应
    mysql5.7版本以上下载安装
    电脑快捷键操作汇总
    关于.eslintrc.js代码检测的一些配置
  • 原文地址:https://www.cnblogs.com/itqn/p/13505579.html
Copyright © 2011-2022 走看看