感谢您的关注。案例如下:
[ffm.bat]
rem %0 in "options" out
set opt=%2
set opt=%opt:~1,-1%&rem de-quotes
set ffcmdstr=ffmpeg -i "%~1" %2 "%~3"
如果我希望将ffcmdstr
变量设置为以下内容:
ffmpeg -i in.mpg -vf "hqdn3d=0:0:4:0" -c:v h264 out.mp4
理想情况下,我输入:
ffm.bat in.mpg "-vf "hqdn3d=0:0:4:0" -c:v h264" out.mp4
问题:
尝试了几种ESCAPE方式但失败了。 请给我任何有用的想法。
现在我用:
"-vf 'hqdn3d=0:0:4:0' -c:v h264"
并添加替换:
set opt=%opt:'="%
答案 0 :(得分:1)
@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
命令中的引号,确保该行上的尾随空格包含不在赋值给变量的值中。)
将parm1
设置为这些参数中的第一个,如果它们存在则删除引号(~
执行此操作),以便parm1
变为in.mpg
。
接下来我们有一个循环
parmlast
设置为结果#2参数。parmlast
是否有值。如果有,请继续移动,直到没有。 %1
现在必须拥有最后一个参数,因此请将其分配给parmlast
并删除任何引号。 parmlast
获取值out.mp4
。
make parm
与parm1
具有相同的值in.mpg
现在是另一个循环。删除parm
和params
的第一个字符,直到parm
为空。这会从in.mpg
中删除params
,因此params
变为"-vf "hqdn3d=0:0:4:0" -c:v h264" out.mp4
接下来,提取一个类似的技巧,这次使用paramlast
从out.mp4
的 end 中删除params
。 params
变为"-vf "hqdn3d=0:0:4:0" -c:v h264"
最后一步 - 使用ffmpeg
开关回显所需的-i
行,parm1
的值,来自params
的字符串减去前2个和后2个字符( Space “和” Space 并应用parmlast
中的最后一个参数。