命令行的高效
有一个情境,我需要调用 yt-dlp
下载 B站或 youtube 的视频,然后通过 ffmpeg
做简单的裁剪拼接。
纯用命令的情况下,整个过程下来也不过是几分钟。
然而为了扩展到其他用户也能使用,必然需要整合 GUI 界面,提供他人使用,方便部分需求者群体做 PPT (一般视频在B站和公众号文章中获取,视频需要嵌入演示文档中播放)。
区别于命令行,GUI 开发难度倍增
研发前分析需求
基于命令的调用,需求已经相当明确。需要的是 python
的 yt-dlp
、C++
的 ffmpeg
。至于GUI 部分打算使用 Qt
作为载体。
GUI 的研发分析
- 学习 PySide6 的框架设计
- 设计交互部分:输入视频地址、下载目录、提供下载过程
- 需打包 exe 应用(暂不考虑 MacOS 等,理论上 Qt 是跨平台框架)
如何在 Python 中调用 shell 命令
- 使用子进程
subprocess
调用ffmpeg
- 获取进度,实时输出进度
- 交互层面:报错处理、提示等
Python subprocess
import subprocess
# windows 第一个参数需要使用cmd 或 powershell
subprocess.run(['powershell','ls', '-l'])
# Linux 可以直接使用
subprocess.run([ 'ls','-l' ])
其他的后端框架,如 nodejs。
const child = require('child_process')
child.exec('dir > dir.txt')
后面就不展开说明,反正每种框架都有对应的方法调用本地 shell 的命令。
交互设计需要加倍的细致
凡是需要封装成为 GUI 的软件,都需要考虑用户体验,不同于命令行界面,成功或报错的提示都是相当明确,产生歧义的可能性很低。
而 GUI 界面,有太多因素影响,而且很难预判用户最终会怎么如何操作。
命令式的简单高效
图形化交互的不可预期
结语
没想到过程比预想中的复杂得多,如果下次还有这种小需求的软件开发,投入开发的效益不高,要是没有学习的必要,我基本就不会进行开发。
这次就分享到这里。