如何从 yt-dlp 中获取文件名并将其用作 ffmpeg 输出文件名?

如何从 yt-dlp 中获取文件名并将其用作 ffmpeg 输出文件名?

我尝试在 ffmpeg 中使用管道命令时使输出名称与输入名称相同。

例子:

该文件名为1-Minute Audio Test for Stereo Speakers & Headphones [2ZrWHtvSog4].m4a。我正在尝试获取输出文件名成为自动地输入文件名但带有.mp3扩展名。

因此最终的名称应该是1-Minute Audio Test for Stereo Speakers & Headphones [2ZrWHtvSog4].mp3无需手动输入的。

例子:

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 test_audio.mp3

这些命令创建一个名为“test_audio.mp3我正在尝试获取它而1-Minute Audio Test for Stereo Speakers & Headphones [2ZrWHtvSog4].mp3无需输入”的文件。

我不确定如何将文件名变量从输入文件传输到/获取到 ffmpeg 的输出文件。

我的想法是:

  1. 从 yt-dlp 获取文件名并将其放在变量中。
  2. 使用该变量作为 ffmpeg 的输出文件名

答案1

以下是对我有用的方法。

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"

解释:

basename 命令用于从 URL 中提取基本名称。它使用 yt-dlp -e 检索视频标题https://www.youtube.com/watch?v=2ZrWHtvSog4然后使用 sed 's/[/:*?”<>|]/_/g' 将文件名中不允许的任何字符替换为下划线。

$(...) 语法用于执行命令并将其输出用作更大命令的一部分。

$(basename "$(yt-dlp-ehttps://www.youtube.com/watch?v=2ZrWHtvSog4| sed 's/[/:*!"<>|]/_/g')").mp3 是添加了 .mp3 扩展名的结果文件名。

相关内容