公开项目+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
 

posted @ 2026-08-03 19:04  秋秋秋秋秋寒  阅读(78)  评论(0)    收藏  举报