我尝试在 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 的输出文件。
我的想法是:
- 从 yt-dlp 获取文件名并将其放在变量中。
- 使用该变量作为 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 扩展名的结果文件名。