更改youtube-dl下载输出(Windows)

时间:2016-04-11 15:58:25

标签: batch-file ffmpeg youtube-dl ffprobe

我希望你能帮助我。

我在windows上使用youtube-dl(youtube-dl.exe) 下载视频效果很好,也只是音频。但我想要的是它将音频文件保存在不同的地方,例如。的 C:\用户******* \桌面

我用这段代码制作了一个批处理文件:

: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位于同一文件夹中

1 个答案:

答案 0 :(得分:1)

打开命令提示符窗口并在那里运行cmd /?。此命令输出Windows命令处理器的帮助。在上一段的最后一个帮助页面上,写了目录或文件名中的哪些字符或可执行文件和脚本的参数需要使用双引号:space和&()[]{}^=;!'+,`~

然后,字符%在批处理文件中具有特殊含义,因为它标记了环境变量的开始和结束。要将%指定为文字字符,必须使用另外一个%进行转义。

在命令提示符窗口中运行set,您将在计算机上显示您的用户帐户的标准环境变量。其中一个标准环境变量是 USERPROFILE ,它保存当前用户的配置文件文件夹的路径,其中包含例如子文件夹Desktop

现在让我们从批处理文件中查看以下行:

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

最好在这里使用Desktop目录的环境变量 USERPROFILE 的引用。用户帐户名可以包含空格字符,因此建议将路径用双引号括起来。接下来是括号和单个百分号,它肯定需要双引号并转义百分号。

存储在环境变量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,因为第一次ping总是立即成功。

命令 ENDLOCAL 导致丢弃表的本地副本,并且在此行之后不再定义环境变量{ToolPath,并且其他变量的所有更改都将丢失),恢复之前的延迟扩展的值(很可能是默认情况下不启用它)和命令扩展(很可能仍默认启用)以及还原以前的工作目录(如果通过双击启动,很可能是批处理文件的路径)。

注意:我没有测试提供的批处理文件,因为我没有安装youtube-dl.exe