You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在终端读取歌曲名并从YouTube下载MP3及脚本故障排查

解决YouTube MP3下载脚本的问题

嘿,我来帮你搞定这个从YouTube下载MP3的脚本问题!你现在的脚本主要有几个小问题:curl的搜索URL拼接错误、youtube-dl的命令语法混乱,还有循环里的路径和引号逻辑不对。我给你整理了两种可行的方案,一种用命令行传参,一种用read命令让你直接输入歌曲名,按需选就行。

方案一:通过命令行参数传入歌曲名

这种方式适合你习惯在启动脚本时直接带上歌曲名的场景,比如 ./script.sh 夜曲 周杰伦。

先看修正后的完整脚本:

#!/bin/bash

# 检查是否传入了歌曲名参数
if [ $# -eq 0 ]; then
    echo "请传入要搜索的歌曲名,比如:./script.sh 夜曲 周杰伦"
    exit 1
fi

# 把所有参数拼接成搜索关键词,空格替换为+(YouTube搜索的格式要求)
search_query=$(echo "$*" | tr ' ' '+')

# 构造YouTube搜索页面的URL
search_url="https://www.youtube.com/results?search_query=${search_query}"

# 提取搜索结果里第一个视频的链接(如果要多个可以调整grep和cut的逻辑)
video_link=$(curl -s "$search_url" | grep -o 'href="/watch[^"]*"' | cut -d'"' -f2 | head -n1)

# 检查是否找到视频链接
if [ -z "$video_link" ]; then
    echo "没找到对应歌曲的视频链接,请检查歌曲名是否正确"
    exit 1
fi

# 使用youtube-dl下载并转换为MP3,保存到指定目录
youtube-dl -x --audio-format mp3 "https://www.youtube.com${video_link}" -o "/home/viacheslav/IdeaProjects/untitled/untitled/%(title)s.%(ext)s"

echo "MP3下载完成,保存路径:/home/viacheslav/IdeaProjects/untitled/untitled/"

关键修正点:

  • 把所有命令行参数拼合成搜索关键词,用tr ' ' '+'替换空格为+,符合YouTube搜索URL的格式
  • 正确构造搜索URL,避免原脚本里${1} ${2}的错误拼接
  • 用grep -o精准提取视频链接,原脚本的grep匹配规则不够准确
  • 给youtube-dl指定了清晰的输出路径和文件名格式,修复了原脚本路径写在URL后的语法错误
  • 增加了参数检查和错误提示,让脚本更健壮

方案二:用read命令让用户输入歌曲名(无需传参)

如果你不想每次启动脚本都带参数,这种方式更友好,启动后直接输入歌曲名就行。

完整脚本如下:

#!/bin/bash

# 提示用户输入歌曲名
echo "请输入要下载的歌曲名:"
read -r song_name

# 检查是否输入了内容
if [ -z "$song_name" ]; then
    echo "你还没输入歌曲名呢!"
    exit 1
fi

# 转换搜索关键词格式
search_query=$(echo "$song_name" | tr ' ' '+')
search_url="https://www.youtube.com/results?search_query=${search_query}"

# 提取视频链接
video_link=$(curl -s "$search_url" | grep -o 'href="/watch[^"]*"' | cut -d'"' -f2 | head -n1)

if [ -z "$video_link" ]; then
    echo "没找到对应歌曲的视频链接,请检查歌曲名是否正确"
    exit 1
fi

# 下载并转换MP3
youtube-dl -x --audio-format mp3 "https://www.youtube.com${video_link}" -o "/home/viacheslav/IdeaProjects/untitled/untitled/%(title)s.%(ext)s"

echo "MP3下载完成,保存路径:/home/viacheslav/IdeaProjects/untitled/untitled/"

使用说明:

  1. 给脚本添加执行权限:chmod +x script.sh
  2. 启动脚本:./script.sh
  3. 按照提示输入歌曲名,回车后就会自动下载啦

注意:如果你的系统里用的是yt-dlp(youtube-dl的替代工具,现在更常用),只需要把脚本里的youtube-dl换成yt-dlp就行,参数是完全兼容的。

内容的提问来源于stack exchange,提问作者Slavko Oleksiuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:24