Как взять имя файла из yt-dlp и использовать его в качестве имени выходного файла ffmpeg?

Как взять имя файла из yt-dlp и использовать его в качестве имени выходного файла ffmpeg?

Я пытаюсь сделать так, чтобы имя выходного файла совпадало с именем входного файла, используя команду pipe в 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 -ehttps://www.youtube.com/watch?v=2ZrWHtvSog4а затем заменяет все символы, недопустимые в именах файлов, на подчеркивания с помощью sed 's/[/:*?"<>|]/_/g'.

Синтаксис $(...) используется для выполнения команды и использования ее вывода как части более крупной команды.

$(базовое имя "$(yt-dlp -ehttps://www.youtube.com/watch?v=2ZrWHtvSog4| sed 's/[/:*?"<>|]/_/g')").mp3 — это результирующее имя файла с добавленным расширением .mp3.

Связанный контент