放弃 Python 和 Electron,选择 aardio 编写批量视频合并软件
最近有从事教育行业的朋友发来求助说,买的网络摄像机,在手机上看的视频是连续的,但是从内存卡里导出到电脑上却是一分钟一段的。教育部门要求的是按天的视频备份。这可把他们给愁坏了、累崩了。
对于他们来说,唯一能够想到的就是用「剪映」之类的视频剪辑软件来对视频进行合并,但是原视频一分钟一段,自称合并完一整天的视频得花个一两天的时间。
我想了想,这个用 ffmpeg 这个神器不就可以搞定嘛,直接调用ffmpeg 的 concat 命令即可。
但是对于非计算机使用人群来说,让他们自己用 ffmpeg 可能会有点懵逼,索性答应给他们写个小脚本。
- 考虑到使用者的计算机水平,软件必须是双击打开即可运行
- 考虑到使用者的电脑环境,满足 Windows 端即可
在州的先生这里,有三个编程语言技术栈能够满足这个功能需求:
- Python 下的 PyQt5、Tkinter
- JavaScript 下的 Electron
- aardio
Python 下的图形界面程序(PyQt5)州的先生写得最多,但是多是自己用、很少打包,因为每次打包 都要碰运气,看天吃饭。
Electron 是州的先生开发「MrDoc客户端」所选择的技术栈,平台兼容性好,开发快速,但是打包体积有点大(得打包一个 V8 引擎进去)。
aardio 使用得最少,基本没有开发过成品软件,但是其小巧且强大的功能一直深得我意,所以一直放在备用工具库中。
从产品的需求和功能来看,只需要用一个窗口界面(甚至不需要图形操作界面),接收使用者输入的原视频目录路径,然后使用进程模块调用本地的 ffmpeg 程序文件执行脚本命令。
所以 Electron 直接否掉了,拖油瓶(v8引擎)太大了。
Python 自用还行,打包后的程序不知道会出现啥错误情况,也给否掉了。
那就 aardio 吧。
看了几个 aardio IDE里面自带的范例和使用手册,直接开干。
导入依赖库:
import console;
import fsys;
import io;
import process;
设置控制台窗口标题:
console.setTitle("ffmpeg视频合并");
获取用户输入的视频目录路径:
var video_path = console.getText("请输入视频目录,然后回车:");
判断用户输入的路径是否存在:
is_path = io.exist(video_path)
while(is_path == null){
video_path = console.getText("路径不正确,请输入视频目录,然后回车:")
is_path = io.exist(video_path)
}
console.log("你输入的是" ,video_path);
console.log("正在读取目录视频信息……");
读取目录并生成视频列表信息文本文件:
// 创建一个文本文件,用于存放视频文件列表
var text_file = io.open(video_path + '/file.txt','a+');
// 获取视频路径下的文件
fsys.enum( video_path, "*.mp4",
function(dirname,filename,fullpath,findData){
if(filename){
//console.log("发现文件:"+filename,"完整路径:"+fullpath);
var text_info = string.format(
"file '%s'
", fullpath);
text_file.write(text_info);
}
}
,false
);
// 将内容写入文件中
text_file.flush();
// 关闭文件
text_file.close();
调用 ffmpeg 执行合并命令:
console.log("正在合并视频……")
// 调用ffmpeg 合并视频
concat_str = string.format(
"-f concat -safe 0 -i %s -c copy %s",
'"' + video_path + '/file.txt' + '"',
'"' + video_path + '/output.mkv' + '"',
)
process('./ffmpeg.exe',concat_str).wait();
// 删除生成的文件信息文本
io.remove(video_path + '/file.txt');
console.log("完成视频合并!")
console.pause();
最后的运行效果如下:
代码写好之后,直接点击 IDE 的「发布」按钮,很快就生成了一个 EXE 文件:
程序体积仅有 1246KB ,将 ffmpeg 的程序文件和打包后的程序放在一起,就可以使用了。将它们打包为 zip 压缩文件发送给使用者,也就完成了交付。
在编写过程中,除了对 aardio 内置库的使用不太熟悉外,代码写起来非常丝滑,推荐大家一试。
网上有学习者经常吐槽其文档很少,其实其 IDE 内已经内置了一份《代码范例》、一份《aardio 库函数文档》和一份《aardio 使用手册》。
相关文章
- Python图像处理丨认识图像锐化和边缘提取的4个算子
- 想了解Python中的super 函数么
- 跟我学Python图像处理丨何为图像的灰度非线性变换
- Python代码用在这些地方,其实1行就够了!
- Python图像处理丨图像的灰度线性变换
- Python图像处理丨基于OpenCV和像素处理的图像灰度化处理
- 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算
- Python图像处理丨带你掌握图像几何变换
- Python图像处理丨如何调用OpenCV绘制直方图
- 学python,怎么能不学习scrapy呢!
- Python图像处理丨两种实现图像形态学转化运算
- Python图像处理丨三种实现图像形态学转化运算模式
- Python图像处理丨图像腐蚀与图像膨胀
- 跟我学Python图像处理丨5种图像阈值化处理及算法对比
- Python图像处理丨图像缩放、旋转、翻转与图像平移
- 520,用Python定制你的《本草纲目女孩》
- 如何使用Python实现图像融合及加法运算?
- 跟我学Python图像处理丨掌握4种图像平滑算法
- 跟我学Python图像处理丨获取图像属性、兴趣ROI区域及通道处理
- Python图像处理丨OpenCV+Numpy库读取与修改像素