如何從 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' 將檔案名稱中不允許的任何字元替換為底線。

$(...) 語法用於執行命令並將其輸出用作較大命令的一部分。

$(基本名稱“$(yt-dlp -ehttps://www.youtube.com/watch?v=2ZrWHtvSog4| sed 's/[/:*?"<>|]/_/g')").mp3 是新增了 .mp3 副檔名的結果檔名。

相關內容