
我試圖在 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' 將檔案名稱中不允許的任何字元替換為底線。
$(...) 語法用於執行命令並將其輸出用作較大命令的一部分。
$(基本名稱“$(yt-dlp -ehttps://www.youtube.com/watch?v=2ZrWHtvSog4| sed 's/[/:*?"<>|]/_/g')").mp3 是新增了 .mp3 副檔名的結果檔名。