@ECHO OFF
SETLOCAL
CALL :gffmpeg "in.mpg -vf "hqdn3d=0:0:4:0" -c:v h264 out.mp4"
CALL :gffmpeg2 in.mpg "-vf "hqdn3d=0:0:4:0" -c:v h264" out.mp4
GOTO :eof
:gffmpeg
SET "params=%*"
ECHO ffmpeg -i %params:~1,-1%
GOTO :EOF
:gffmpeg2
SET "params=%*"
SET parm1=%~1
:parml
SHIFT
SET "parmlast=%~2"
IF DEFINED parmlast GOTO parml
SET "parmlast=%~1"
SET "parm=%parm1%"
:parm1L
IF DEFINED parm SET "parm=%parm:~1%"&SET "params=%params:~1%"&GOTO parm1L
SET "parm=%parmlast%"
:parmLL
IF DEFINED parm SET "parm=%parm:~1%"&SET "params=%params:~0,-1%"&GOTO parmLL
ECHO ffmpeg -i %parm1% %params:~2,-2% %parmlast%
GOTO :EOF
这里有两种方法 - 第一种方法需要重新格式化参数提供的;第二个是你目前掌握的。
所以,服用第二方法步骤一步:
驾驶批次thisbatch in.mpg“-vf “hqdn3d = 0:0:4:0” -c: v H264" out.mp4
@ECHO OFF
SETLOCAL
SET "params=%*"
SET parm1=%~1
:parml
SHIFT
SET "parmlast=%~2"
IF DEFINED parmlast GOTO parml
SET "parmlast=%~1"
SET "parm=%parm1%"
:parm1L
IF DEFINED parm SET "parm=%parm:~1%"&SET "params=%params:~1%"&GOTO parm1L
SET "parm=%parmlast%"
:parmLL
IF DEFINED parm SET "parm=%parm:~1%"&SET "params=%params:~0,-1%"&GOTO parmLL
ECHO ffmpeg -i %parm1% %params:~2,-2% %parmlast%
GOTO :EOF
首先,设置params
到整个命令尾in.mpg "-vf "hqdn3d=0:0:4:0" -c:v h264" out.mp4
(在set
命令引号确保就行后续空格不 includ版在分配给该变量的值。)
集parm1
到第一这些参数,其中移除了引号如果它们存在(的~
执行此),因此变得parm1
in.mpg
。
接下来,我们具有
- “偏移” 中的参数位置的环:#1被丢弃,#2变为#1和 等。
- 将
parmlast
设置为结果#2参数。
- 检查
parmlast
是否有值。如果有,继续转移,直到它没有。
%1
现在必须具有最后一个参数,因此将其指定为parmlast
并删除任何引号。 parmlast
获得值out.mp4
。
化妆parm
具有相同的价值parm1
所以in.mpg
现在另一个循环。删除第一个字符parm
和params
,直到parm
为空。这消除了从in.mpg
所以params
变得params
"-vf "hqdn3d=0:0:4:0" -c:v h264" out.mp4
接着,拉相似的技巧,此时使用paramlast
从端的params
除去out.mp4
。 params
变得"-vf "hqdn3d=0:0:4:0" -c:v h264"
最后一步 - 回波与-i
开关,的parm1
值,从params
字符串减去第一2和最后2个字符(空间“和”所需ffmpeg
线空间分别为)并应用parmlast
的最后一个参数。
我推荐一种不同的评论方法。在另一个命令的同一行使用REM非常混乱。我只是在你正在评论的命令之前使用':: comment',或者甚至使用'REM注释'。 – unclemeat
我建议你使用单引号的方法,然后用双引号代替是最好的方法。但是,您是否真的需要将单引号替换掉?你还可以用单引号中的开关值调用ffmpeg命令吗? – unclemeat
@unclemeat,之后的评论是为你的帮手,但谢谢。不幸的是,无论ffmpeg是否接受单引号,该cmd字符串都不会被Win的COMMAND.COM接受。并导致ffmpeg错误: 1. '[NULL @ 0000000004bb96a0]无法找到'-vf'的合适输出格式hq n3d = 0:0:4:0'-c:v h264'' 2。 '-vf'hqdn3d = 0:0:4:0'-c:v h264:无效参数' –