【问题标题】:batch file for encoding videos with ffmpeg - "variable": %%a使用 ffmpeg 编码视频的批处理文件 - “变量”:%%a
【发布时间】:2015-08-22 18:50:40
【问题描述】:

这个表达式中的'%%a'和'%%~na'是什么意思:http://www.pasteall.org/58875

for %%a in ("*.*") do ffmpeg -i "%%a" "newfiles\%%~na.mp4"pause

我想批量编码几个视频文件。都在同一个文件夹中,没有其他内容。我找到了说明它是一个变量的解释。但是像这样的变量代表什么?

正在开发 win 7 ult 64bit。

【问题讨论】:

    标签: batch-file video ffmpeg encode


    【解决方案1】:

    %%~na 将返回文件名,不包含 for 循环返回的文件的路径或扩展名。

    来自for /?的输出:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    

    【讨论】:

    【解决方案2】:

    %%a 是一个特殊参数,它将被 FOR 循环的值替换,IN ( ....) 子句被评估,并且 %%a 在每次迭代中设置为不同的值。

    【讨论】:

    • 在哪里可以找到非专业人士可以理解的关于“in 子句”和“for 循环”的解释?此外,我不理解开篇文章中表达式的语法。
    • 我的每个研究结果都像“使用'a'来将'b'设置为'c'然后返回'd'。它根本没有帮助我,当我不知道 'a' 是什么,也不知道 'b'、'c' 或 'd'...
    • 好的,让我解释一下你可能喜欢的另一种方式; for 用于循环文件中的一组行,或部分 () 中命令输出的一组行,在您使用的代码中 (.) 这意味着您的 for 循环将逐行获取批处理文件在其中运行的目录中的所有文件,并将值传递给 for 循环中使用的变量 %%a 。稍后可以使用具有for循环值的%%a并将其转换为视频文件。
    • 非常感谢。与此同时,我设法用批处理文件对一系列视频进行了编码。见pasteall.org/58898。但总的来说,我真的需要习惯整个话题。问题:在我的案例中是否需要在示例代码行中经常找到的引号(请参阅粘贴的代码)?我让批处理文件不带引号运行,似乎没有什么区别。
    • 将参数列表中的文件扩展名“.mp4”替换为星号 (pasteall.org/58899) 会导致错误消息:“处理输入时发现无效数据”。但这似乎不会影响结果。当工作文件夹只包含源视频文件、输出文件夹和批处理文件时,也会出现此错误。这个错误的原因是什么/这是什么意思?
    猜你喜欢
    • 2012-08-25
    • 2014-08-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多