连接下载 m4a 并将其转换为 mp3 的单独命令

连接下载 m4a 并将其转换为 mp3 的单独命令

我可以使用以下命令下载音频,但如何同时将其转换为 mp3 文件。

示例:下载 m4a 文件

yt-dlp -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' <url>

使用以下方法将 m4a 文件转换为 mp3:

ffmpeg -i download_audio.m4a -codec:a libmp3lame -b:a 22050 -ac 1 -ar 22050 converted_audio.mp3

我怎样才能将这两个命令转换为一个?(这样我就不必执行两个单独的命令)

答案1

它出现yt-dlp可以使用选项 ... 写入 STDOUT-o -例如:

yt-dlp -o - -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' URL_HERE

ffmpeg可以从 STDIN/管道读取,-i pipe:或者甚至-i -......例如像这样:

... | ffmpeg -i pipe: -codec:a libmp3lame -b:a 22050 -ac 1 -ar 22050 converted_audio.mp3

因此,你可以尝试这样的方法:

yt-dlp -o - -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' URL_HERE | ffmpeg -i pipe: -codec:a libmp3lame -b:a 22050 -ac 1 -ar 22050 converted_audio.mp3

答案2

yt-dlp -o - -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' https://www.youtube.com/watch?v=2ZrWHtvSog4 | ffmpeg -i pipe: -codec:a libmp3lame -b:a 8000 -ac 1 -ar 8000 -f mp3 "$(basename "$(yt-dlp -e https://www.youtube.com/watch?v=2ZrWHtvSog4 | sed 's/[\/:*?"<>|]/_/g')").mp3"

要使用与 相同的管道输出文件名作为输入名称ffmpeg,可以按如下方式修改命令:

yt-dlp -o - -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' https://www.youtube.com/watch?v=2ZrWHtvSog4 | ffmpeg -i pipe: -codec:a libmp3lame -b:a 8000 -ac 1 -ar 8000 -f mp3 "$(basename "$(yt-dlp -e https://www.youtube.com/watch?v=2ZrWHtvSog4 | sed 's/[\/:*?"<>|]/_/g')").mp3"

解释:

  1. basename命令用于从 URL 中提取基本名称。它使用 检索视频标题yt-dlp -e https://www.youtube.com/watch?v=2ZrWHtvSog4,然后使用 将文件名中不允许的任何字符替换为下划线sed 's/[\/:*?"<>|]/_/g'
  2. $(...)语法用于执行命令并将其输出用作更大命令的一部分。
  3. $(basename "$(yt-dlp -e https://www.youtube.com/watch?v=2ZrWHtvSog4 | sed 's/[\/:*?"<>|]/_/g')").mp3是添加了扩展名的结果文件名.mp3

相关内容