ffmpeg 编码器脚本.bat字符串输入



好的,我有这个脚本,它用ffmpeg进行批量编码。它基本上为每个文件调用 ffmpeg。我想做的是让脚本在开始执行之前询问输入和输出位置。

以下是原始脚本:

for %%a in ("*.mp4") do "G:ffmpegbinffmpeg" -i "%%a" -c:v libx264 -preset slow -crf 20 -maxrate 15000k -bufsize 2000k -acodec copy "newfiles%%~na.mp4"

现在我希望能够输入一个字符串,其中包含第一个括号("*.mp4")中的文件位置,末尾为"newfiles\%%~na.mp4"。

我假设 %%~na 用于生成数字订单或其他东西,但我不完全确定。

我假设需要创建两个变量/字符串,然后通过从键盘读取来使用。可悲的是,我对此完全没有经验。在学校做了一些C ++,但仅此而已。

提前谢谢。

您可以查询用户的文件夹名称并将其添加到前面,如下所示:

@echo off
set /p fromfolder="Enter search folder: "
set /p tofolder="Enter destination folder: "
for %%a in ("%fromfolder%*.mp4") do "G:ffmpegbinffmpeg" -i "%%a" -c:v libx264 -preset slow -crf 20 -maxrate 15000k -bufsize 2000k -acodec copy "%tofolder%%%~na.mp4"

%~nI(其中I是可变的,在您的情况下a)将执行以下操作:expands %I to a file name only(有效地从路径的文件名部分中删除文件扩展名)。在.BAT文件中使用时,您需要使用 %% 而不是 % .

如果键入for /?,您将获得有关 for-命令的帮助。它将解释如何使用该命令,以及如何使用变量替换。此处包含部分for /?以便于参考:

此外,还增强了 FOR 变量引用的替换功能。现在,您可以使用以下可选语法:    %~I - 展开 %I 删除所有括起来的引号 (")    %~fI - 将 %I 扩展为完全限定的路径名    %~dI - 仅将 %I 扩展为驱动器号    %~pI - 仅将 %I 扩展为路径    %~nI - 仅将 %I 扩展为文件名    %~xI - 仅将 %I 扩展为文件扩展名    %~sI - 扩展路径仅包含短名称    %~aI - 将 %I 展开为文件的文件属性    %~tI - 将 %I 展开为文件的日期/时间    %~zI - 将 %I 扩展为文件大小    %~$PATH:I - 搜索 PATH 中列出的目录                   环境变量并将 %I 扩展到                   找到的第一个完全限定的名称。                   如果环境变量名称不是                   定义或文件未被                   搜索,然后此修饰符展开为                   空字符串修饰符可以组合以获得复合结果:    %~dpI - 仅将 %I 扩展为驱动器号和路径    %~nxI - 仅将 %I 扩展为文件名和扩展名    %~fsI - 将 %I 扩展为仅包含短名称的完整路径名    %~dp$PATH:I - 搜索路径中列出的目录                   %I 的环境变量并扩展到                   找到的第一个驱动器号和路径。    %~ftzaI - 将 %I 扩展为类似于 DIR 的输出行在上面的例子中,%I和PATH可以用其他有效的值。 %~ 语法由有效的 FOR 变量名称终止。选择大写变量名称(如 %I)使其更具可读性和避免与不区分大小写的修饰符混淆。

我想指出的是,通常命令行命令采用参数而不是查询用户的输入。您可以将此与要求用户输入相结合。

@echo off
set fromfolder=%1
set tofolder=%2
REM Remove "" from folder names
set fromfolder=%fromfolder:"=%
set tofolder=%tofolder:"=%
REM Ask user if cmd line parameters not provided
IF [%fromfolder%] == [] set /p fromfolder="Enter source folder: "
IF [%tofolder%] == [] set /p tofolder="Enter destination folder: "
echo Source folder: %fromfolder%
echo Destination folder: %tofolder%
REM Execute command
for %%a in ("%fromfolder%*.mp4") do "G:ffmpegbinffmpeg" -i "%%a" -c:v libx264 -preset slow -crf 20 -maxrate 15000k -bufsize 2000k -acodec copy "%tofolder%%%~na.mp4"
REM Unset
set fromfolder=
set tofolder=

执行方式:script.bat "folder1" "folder2"
文件夹名称两边的"仅在包含空格的情况下才需要。

最新更新