公开项目+termux+VibeCoding出一个手机端视频下载工具
前段时间学剪辑,去网上找素材,发现大多都是不可下载,但是有各种微信工具箱或者软件能提供下载,用了一段时间,不是要看广告,就是要做任务,于是想着自己做一个,同时为了方便使用,决定在手机端部署。
1.Termux下载
Termux是一个运行在移动手机上的终端,可以执行各种linux命令,因为手机没有像电脑一样的终端用来执行命令,所以一个linux环境应用程序是必要的。
官方下载地址:https://github.com/termux/termux-app
也可以去APKPuer和f-droid等国外软件商店下载。
Termux-api是一个功能强大的附加组件,它将终端扩展到了安卓系统本身,在本案例中需要读取剪贴板,所以termux-api是必需的。
官方下载地址:https://github.com/termux/termux-api
同样可以在APKPuer和f-droid等国外软件商店下载。
2.termux配置
termux-setup-storage # 获取存储权限,视频才能存进相册
pkg update && pkg upgrade -y
pkg install python ffmpeg git termux-api -y
3.克隆公共项目到本地
借助ai找到了一个公共项目,在终端借助git工具克隆下来:
git clone https://github.com/jiji262/douyin-downloader.git
克隆完成后,cd进入
cd douyin-downloader/
下载项目所需库
pip install -r requirements.txt
4.配置项目cookie
项目提供了一种自动化获取cookie的方式,但是我怀疑手机的转译效率太低(上面下载所需库花了很长时间),到最后可能会卡到天荒地老,所以在电脑上又clone了一遍,然后获取到cookie之后,cookie会自动写入config.yml,最后将config.yml传回手机。
在电脑上执行步骤3后,还需要额外的一些配置。
pip install playwright #安装额外的库
python -m playwright install chromium
复制配置文件
cp config.example.yml config.yml
获取cookie
python -m tools.cookie_fetcher --config config.yml
登录抖音后,返回终端并按回车,Cookie 会自动写入config.yml,这时候可以编辑一下配置文件,将不需要的地方设为False
#下载链接(设空)
link: []
#下载路径(可配可不配) path: $HOME/storage/downloads/douyin/
#下载选项 video: true #下载视频 music: False #下载音乐 cover: False #下载封面 avatar: False#下载头像 json: False #保存json数据 folderstyle: False #禁用文件结构设置,所有视频共用一个文件夹
最后将config.yml传回手机,我将它放在了手机Download文件夹下,在termux终端执行以下命令将它复制过来。
cp $HOME/storage/downloads/config.yml ./ #注意此时应在douyin-downloader目录下
此时这个项目就算部署完了,可以测试是否能够正常运行
python run.py -c config.yml -u "抖音分享链接" -p "$HOME/storage/downloads/douyin/"
5.半自动化
如果有多条需要下载的视频,可以借助手机键盘的剪贴板功能,将所有链接粘贴在一起,最后将其整合为一条剪贴记录(剪贴板长度有限,大概只有45条左右)。
然后将包含多个链接的剪贴记录读取到终端,借助ai生成一个自动代脚本,将这个多个链接提取,然后写入config.yml文件里的link项中,然后执行下载,最后将link项清空,确保不会影响下次使用。
5.1 测试termux能否读取剪贴板
随便复制一串文本,然后在termux执行以下命令,如果输出了文本,那就是成功了。
termux-clipboard-get
5.2 将自动化脚本放入项目中
可以使用电脑将脚本保存然后传回手机,像上面的config.yml一样,放到项目目录下。
也可以使用nano等工具直接在终端复制保存。
#!/data/data/com.termux/files/usr/bin/bash # -*- coding: utf-8 -*- # ============================================================================ # 配置区域(可根据需要修改) # ============================================================================ CONFIG_FILE="config.yml" # 配置文件路径(相对于脚本运行目录) DOWNLOAD_DIR="$HOME/storage/downloads/douyin/" # 下载输出目录 PYTHON_CMD="python" # Python命令 RUN_SCRIPT="run.py" # 下载器主脚本名称 # ============================================================================ # 函数:更新配置文件中的 link 字段 # 参数:一个字符串,用 '|' 分隔多个 URL;若为空字符串,则设置为空列表 "link: []" # ============================================================================ update_links() { local urls_str="$1" awk -v urls_str="$urls_str" ' BEGIN { # 构建新的 link 内容 if (urls_str == "") { new_link = "link: []" } else { split(urls_str, urls, "|"); new_link = "link:" for (i in urls) { new_link = new_link "\n- " urls[i] } } printed_link = 0 # 是否已经写入过 link in_link = 0 # 是否正在处理 link 块 } /^link:/ { # 遇到 link: 行,输出新内容,跳过原行 print new_link printed_link = 1 in_link = 1 next } in_link { # 如果在 link 块内,跳过所有列表项(包括缩进和顶格的 - 开头行) if ($0 ~ /^[[:space:]]/ || $0 ~ /^-/) { next } else { # 非列表项,说明 link 块结束,输出该行并退出 in_link 模式 in_link = 0 print next } } { # 普通行直接输出 print } END { # 如果文件中从未出现 link:,则在末尾追加 if (!printed_link) { print new_link } } ' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" } # ============================================================================ # 主流程 # ============================================================================ # 1. 检查依赖命令 for cmd in termux-clipboard-get grep awk python; do if ! command -v "$cmd" &>/dev/null; then echo "错误:未找到命令 '$cmd',请先安装。" >&2 exit 1 fi done # 2. 获取剪贴板内容 share_text=$(termux-clipboard-get 2>/dev/null) if [ -z "$share_text" ]; then echo "错误:无法获取剪贴板内容或剪贴板为空。" >&2 exit 1 fi # 3. 提取所有抖音短链接(v.douyin.com) urls=() while IFS= read -r url; do [[ -n "$url" ]] && urls+=("$url") done < <(echo "$share_text" | grep -oP 'https?://v\.douyin\.com/[A-Za-z0-9_-]+/?') if [ ${#urls[@]} -eq 0 ]; then echo "剪贴板中未找到抖音分享链接(v.douyin.com),程序退出。" exit 0 fi echo "找到 ${#urls[@]} 个链接:" printf ' %s\n' "${urls[@]}" # 4. 将链接写入 config.yml urls_str=$(IFS='|'; echo "${urls[*]}") update_links "$urls_str" if [ $? -ne 0 ]; then echo "错误:更新配置文件失败。" >&2 exit 1 fi # 5. 执行下载命令 echo "开始执行下载器..." $PYTHON_CMD "$RUN_SCRIPT" -c "$CONFIG_FILE" -p "$DOWNLOAD_DIR" download_exit=$? if [ $download_exit -ne 0 ]; then echo "下载器执行失败(退出码 $download_exit),但将继续清空链接。" else echo "下载器执行成功。" fi # 6. 清空配置文件中的链接(设置为空列表) echo "正在清空链接配置..." update_links "" if [ $? -ne 0 ]; then echo "警告:清空链接配置失败。" >&2 else echo "链接已清空。" fi echo "全部操作完成。"
将其保存为start.sh文件,唯一需要注意的是DOWNLOAD_DIR,可以自行设置输出位置,这也是上面config.yml中输出路径可配可不配的原因,因为会在这里重新配置(具体原因是有bug,在yml文件中的输出路径没有效果,可能是我的问题)。
给予执行权限
chmod +x start.sh
去除特殊字符
sed -i 's/\r$//' ./start.sh
5.3 测试
这个时候就已经配置好的,可以去复制3,5条记录在剪贴板,在备忘录中粘贴这些链接,然后全部复制,最后去termux执行这个命令
./start.sh
6.用到的软件和脚本
下载:https://wwapd.lanzoul.com/iZMtY40c8d5i 密码:3zyv
浙公网安备 33010602011771号