前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >放弃 Python 和 Electron,选择 aardio 编写批量视频合并软件

放弃 Python 和 Electron,选择 aardio 编写批量视频合并软件

作者头像
州的先生
发布2022-12-22 16:17:57
1.1K0
发布2022-12-22 16:17:57
举报
文章被收录于专栏:州的先生州的先生

最近有从事教育行业的朋友发来求助说,买的网络摄像机,在手机上看的视频是连续的,但是从内存卡里导出到电脑上却是一分钟一段的。教育部门要求的是按天的视频备份。这可把他们给愁坏了、累崩了。

对于他们来说,唯一能够想到的就是用「剪映」之类的视频剪辑软件来对视频进行合并,但是原视频一分钟一段,自称合并完一整天的视频得花个一两天的时间。

我想了想,这个用 ffmpeg 这个神器不就可以搞定嘛,直接调用ffmpeg 的 concat 命令即可

但是对于非计算机使用人群来说,让他们自己用 ffmpeg 可能会有点懵逼,索性答应给他们写个小脚本。

  • 考虑到使用者的计算机水平,软件必须是双击打开即可运行
  • 考虑到使用者的电脑环境,满足 Windows 端即可

在州的先生这里,有三个编程语言技术栈能够满足这个功能需求:

  • Python 下的 PyQt5、Tkinter
  • JavaScript 下的 Electron
  • aardio

Python 下的图形界面程序(PyQt5)州的先生写得最多,但是多是自己用、很少打包,因为每次打包 都要碰运气,看天吃饭

Electron 是州的先生开发「MrDoc客户端」所选择的技术栈,平台兼容性好,开发快速,但是打包体积有点大(得打包一个 V8 引擎进去)

aardio 使用得最少,基本没有开发过成品软件,但是其小巧且强大的功能一直深得我意,所以一直放在备用工具库中。

从产品的需求和功能来看,只需要用一个窗口界面(甚至不需要图形操作界面),接收使用者输入的原视频目录路径,然后使用进程模块调用本地的 ffmpeg 程序文件执行脚本命令。

所以 Electron 直接否掉了,拖油瓶(v8引擎)太大了。

Python 自用还行,打包后的程序不知道会出现啥错误情况,也给否掉了。

那就 aardio 吧。

看了几个 aardio IDE里面自带的范例和使用手册,直接开干。

导入依赖库:

代码语言:javascript
复制
import console;
import fsys;
import io;
import process;

设置控制台窗口标题:

代码语言:javascript
复制
console.setTitle("ffmpeg视频合并");

获取用户输入的视频目录路径:

代码语言:javascript
复制
var video_path = console.getText("请输入视频目录,然后回车:");

判断用户输入的路径是否存在:

代码语言:javascript
复制
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("正在读取目录视频信息……");

读取目录并生成视频列表信息文本文件:

代码语言:javascript
复制
// 创建一个文本文件,用于存放视频文件列表
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 执行合并命令:

代码语言:javascript
复制
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 使用手册》。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 州的先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档