跳到主要内容

人机交互设计并不是这么简单

· 阅读需 3 分钟
Norman pong

命令行的高效

有一个情境,我需要调用 yt-dlp 下载 B站或 youtube 的视频,然后通过 ffmpeg 做简单的裁剪拼接。

纯用命令的情况下,整个过程下来也不过是几分钟。

然而为了扩展到其他用户也能使用,必然需要整合 GUI 界面,提供他人使用,方便部分需求者群体做 PPT (一般视频在B站和公众号文章中获取,视频需要嵌入演示文档中播放)。


区别于命令行,GUI 开发难度倍增

研发前分析需求

基于命令的调用,需求已经相当明确。需要的是 pythonyt-dlpC++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 界面,有太多因素影响,而且很难预判用户最终会怎么如何操作。

命令式的简单高效

图形化交互的不可预期

结语

没想到过程比预想中的复杂得多,如果下次还有这种小需求的软件开发,投入开发的效益不高,要是没有学习的必要,我基本就不会进行开发。

这次就分享到这里。