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