2016-04-11 5 views
0

Надеюсь, вы можете мне помочь.Изменение выходного файла youtube-dl (Windows)

Я использую youtube-dl на окнах (youtube-dl.exe) Скачивание видео отлично работает, а также просто аудио. Но я хочу, чтобы он сохранил аудиофайл в другом месте, например. C: \ Users ******* \ Desktop

Я сделал пакетный файл с этим кодом:

:audio 
cls 
echo. 
echo. 
echo Your audio vill be downloaded and saved as a .mp3 format 
echo. 
echo. 
set /p audio=Enter Video URL here: 
cls 
youtube-dl.exe --extract-audio --audio-format mp3 --output C:\Users\*******\Desktop\(ext)s.%(ext)s %audio% 
pause 
cls 
echo. 
echo. 
echo. 
echo. 
echo Your audio has now been downloaded. 
ping localhost -n 3 >nul 
exit 

, а затем он дает мне это

Usage: youtube-dl.exe [OPTIONS] URL [URL...] 

youtube-dl.exe: error: You must provide at least one URL. 
Type youtube-dl --help to see a list of all options. 
Press any key to continue . . . 

Он работает отлично, если я использую это, но он сохраняет его в той же папке.

:audio 
cls 
echo. 
echo. 
echo Your audio vill be downloaded and saved as a .mp3 format 
echo. 
echo. 
set /p audio=Enter Video URL here: 
cls 
youtube-dl.exe --extract-audio --audio-format mp3 %audio% 
pause 
cls 
echo. 
echo. 
echo. 
echo. 
echo Your audio has now been downloaded. 
ping localhost -n 3 >nul 
exit 

Также, пожалуйста, имейте в виду, что он также использует ffprobe.exe и ffmpeg.exe (Они оба в той же папке, как YouTube-dl.exe

+0

Я не предполагаю, что у вас есть пробелы в имени пользователя? – SomethingDark

+0

Было бы лучше сделать сохранение для пути к var и позволить пользователю вводить его в пакет – Jonas

ответ

1

Открыть окно командной строки и запустите там cmd /?. Эта команда выводит справку для командного процессора Windows. На последней странице справки в последнем абзаце написано, какие символы в каталоге или имени файла или аргументы исполняемых файлов и скриптов требуют использования двойных кавычек: пробел и &()[]{}^=;!'+,`~

Тогда символ % имеет специальное значение в командном файле, так как он отмечает начало и конец переменной среды. Чтобы указать % как буквенный символ, он должен быть экранирован еще одним %.

В окне командной строки запустите set и вы увидите стандартные переменные среды для вашей учетной записи пользователя на вашем компьютере. Одна из этих стандартных переменных окружения - USERPROFILE, которая содержит путь к папке профиля текущего пользователя, содержащую, например, подпапку Desktop.

Теперь давайте посмотрим на следующую строку из вашего пакетного файла:

youtube-dl.exe --extract-audio --audio-format mp3 --output C:\Users\*******\Desktop\(ext)s.%(ext)s %audio% 

Было бы хорошо, чтобы использовать здесь ссылку на переменные окружения USERPROFILE для каталога Desktop. Имя учетной записи пользователя может содержать пробельный символ, поэтому рекомендуется заключить путь в двойные кавычки. Далее заключены круглые скобки и один знак процента, который определенно требует двойных кавычек и избегает знака процента.

URL-адрес, хранящийся в переменной окружения audio, не может содержать пробел, как в URL-адресах, пробельный символ должен быть закодирован с помощью% 20. Но этот знак одного процента снова вызывает проблемы при интерпретации строки командным процессором Windows. Решение использует задержанное расширение.

Давайте посмотрим на этот код партии:

@echo off 
setlocal EnableDelayedExpansion 
set "ToolPath=%~dp0" 
cd /D "%USERPROFILE%\Desktop" 
:audio 
cls 
echo. 
echo. 
echo Your audio will be downloaded and saved as a .mp3 format 
echo. 
echo. 
set /P "audio=Enter audio URL here: " 
cls 
"%ToolPath%youtube-dl.exe" --extract-audio --audio-format mp3 --output "%USERPROFILE%\Desktop\(ext)s.%%(ext)s" "!audio!" 
pause 
cls 
echo. 
echo. 
echo. 
echo. 
echo Your audio has now been downloaded. 
%SystemRoot%\System32\ping.exe 127.0.0.1 -n 4 >nul 
endlocal 
exit /B 

Пакетный файл сначала создает локальную копию всех переменных окружения, позволяет с задержкой расширения переменных и также помнить текущий рабочий каталог.

Далее путь к каталогу, содержащему командный файл и другие исполняемые файлы, используемые этим командным файлом, присваивается переменной ToolPath. Запустите в окне командной строки call /? для получения дополнительной информации о %~dp0 (диск и путь аргумента 0 - командный файл - всегда заканчивается обратным слэшем).

Затем текущий каталог изменяется на каталог Desktop используемой учетной записи пользователя, независимо от которой был запущен командный файл. Запустите в командной строке окно cd /? для получения дополнительной информации об этой команде и ее параметрах.

Линия с youtube-dl.exe изменилась, поскольку в настоящее время исполняемый файл вызывается с полным путем (в качестве текущего рабочего каталога теперь находится каталог пользователя Desktop). Кроме того, выходной каталог заключен в двойные кавычки, использует также переменную окружения USERPROFILE, имеет знак единого процента, сбегающий с еще одним %, и URL-адрес теперь упоминается в двойных кавычках с использованием замедленного расширения (восклицательные знаки вместо знаков процента). Запустите в окне командной строки set /? для получения справки и информации о задержанном расширении.

Для таймаута в течение 3 секунд значение, используемое для команды PING должно быть 4, так как первый пинг всегда сразу же удался.

Команда Endlocal приводит отбрасывая локальную копию таблицы с переменным окружением (ToolPath не определен больше после этой строки и все изменения на других переменных теряются), восстанавливает предыдущие значения замедленного расширения (скорее всего токарные он отключен по умолчанию) и расширения команд (скорее всего, по-прежнему включены по умолчанию), а также восстановление предыдущего рабочего каталога (скорее всего, путь к пакетному файлу, если он начинается с двойного щелчка).

Примечание: Я не тестировал предоставленный пакетный файл, поскольку у меня нет youtube-dl.exe.