JavaFX桌面应用-视频转码工具(支持爱奇艺qsv转mp4)
最近由于需要将在爱奇艺下载的视频(qsv)转化了mp4,用JavaFX开发一个视频转码工具,算是JavaFX开发的第一个应用吧。
支持qsv转码mp4,理论上支持各种格式,仅测试了flv,qsv格式。
文末有安装包获取途径
~ JavaFX桌面应用开发系列文章传送门 ~
- JavaFX桌面应用开发-HelloWorld
- JavaFX布局神器-SceneBuilder
- JavaFX让UI更美观-CSS样式
- JavaFX桌面应用-为什么应用老是“未响应”
- JavaFX桌面应用-MVC模式开发,“真香”
- JavaFX桌面应用-loading界面
- JavaFX桌面应用-表格用法
- 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即可。
=========================================================
关注 公众号 “HiIT青年” 发送 “视频转码工具” 获取安装包。

关注公众号,阅读更多文章。
JavaFX桌面应用-视频转码工具(支持爱奇艺qsv转mp4)的更多相关文章
- 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频
视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频 2018-07-11 | 标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...
- 爱奇艺vip视频免费看
代码: <html> <meta charset="utf-8" /> <head> <script> var num = 0; v ...
- 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!
众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...
- android银行卡匹配、详情展开动画、仿爱奇艺视频拖拽、扫码识别手机号等源码
Android精选源码 android实现银行卡匹配信息源码 android实现可以展开查看详情的卡片 下拉刷新,上拉加载,侧滑显示菜单等效果RefreshSwipeRecyclerview andr ...
- 仿爱奇艺视频,腾讯视频,搜狐视频首页推荐位轮播图(二)之SuperIndicator源码分析
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52510431 背景:仿爱奇艺视频,腾讯视频 ...
- 如何下载哔哩哔哩、爱奇艺、腾讯视频、优酷、斗鱼、TED、YouTube网页视频
这里使用you-get工具进行下载 github地址:https://github.com/soimort/you-get/ github项目文档:https://github.com/soimort ...
- 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)
导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...
- 动态获取爱奇艺上传视频mp4格式url地址
有时候,在工作中有些客户需要用到视频,我们大家都知道视频是非常的耗费流量的,因此,如果因为项目要求客户单独买台视频服务器是非常划不来的.那么将视频上传到优酷,爱奇艺等视频网站来托管那是一件很好的解决方 ...
- 如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频
如何使用油猴脚本不要vip就能观看各大视频网站如腾讯,爱奇艺等的vip视频 首先打开谷歌商店(这里需要fq,如不能fq的小伙伴请看上面写的Chrome怎么访问外网) 搜索Tampermonkey,点击 ...
随机推荐
- springboot+junit测试
文章目录 一.junit断言 二.测试模块 三.使用Mockito作为桩模块 四.使用mockMvc测试web层 五.批量测试和测试覆盖率 参考视频:用Spring Boot编写RESTful API ...
- PyQt5主界面
QMainWindow QMainWindow控件继承之QWidget控件,QWidget是所有控件的父类,主要提供界面的基本功能,包括边框.标题.工具栏.关闭按钮.最小化按钮以及最大化按钮等.子类中 ...
- python-在python3中使用容联云通讯发送短信验证码
容联云通讯是第三方平台,能够提供短信验证码和语音通信等功能,这里只测试使用短信验证码的功能,因此只需完成注册登录(无需实名认证等)即可使用其短信验证码免费测试服务,不过免费测试服务只能给控制台中指定的 ...
- DJANGO-天天生鲜项目从0到1-006-首页-内容展示
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
- 检查string是否有重复尝试用map
链接: 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入的大小写,按字典序排列. 题解:先 ...
- BUUCTF-web Easyweb
从这道题学到了挺多 一打开题目就是登陆页面,遂扫描文件检测是否存在文件泄露 用dirsearch扫出了robots.txt,.DS_Store和其他php.DS_Store没有可用信息(buuoj的题 ...
- 【论文笔记】Self-Supervised GAN :辅助性旋转损失的自监督生成式对抗网络
这是CVPR2019上UCLA和google brain的一个工作.模型非常简单,利用辅助损失解决GAN不稳定问题:用旋转分类将辅助分类器对label的需求去掉,使图片可以直接对自己标注类别. Sel ...
- 豆瓣 9.0 分的《Python学习知识手册》|百度网盘免费下载|
豆瓣 9.0 分的<Python学习知识手册>|百度网盘免费下载| 提取码:nuak 这是之前入门学习Python时候的学习资料,非常全面,从Python基础.到web开发.数据分析.机器 ...
- Ribbon 负载规则替换
1 添加规则类: 注意: 官方文档明确给出了警告: 这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下,否则自定义的配置类就会被所有的 Ribbon 客户端所共享,达不 ...
- springboot整合邮件发送(163邮箱发送为例)
先登录163邮箱获取授权 勾选后安装提示会叫你设置授权密码之类的:记住授权的密码 1.引入maven依赖 <dependency> <groupId>org.springfr ...