gpt4 book ai didi

batch-file - 在 FOR 循环期间设置变量和调用结果;批处理脚本窗口

转载 作者:行者123 更新时间:2023-12-04 22:59:32 26 4
gpt4 key购买 nike

我在 Stackoverflow 上阅读了几篇关于在 FOR 循环期间绑定(bind)变量的文章。虽然我认为这里提供的大部分帮助都是针对 Linux/Unix 的,但我正在寻求有关 Windows 中的批处理脚本的帮助。我的主要目标是从 mp4 文件中提取“创建日期”并使用 ffmpeg(和或 ffprobe)“在我的视频上叠加日期”。

我已经做了很多实验,但我最近的尝试是尝试将 ffprobe 的结果绑定(bind)到一个变量上,然后再使用该变量。我最新和最简单的尝试如下所示:

SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in ("*.mp4") do (
for /F "tokens=*" %%G in ('ffprobe -v quiet %%a -print_format compact -show_entries format_tags=creation_time') do (
set DateC=%%G
echo !DateC!)
)

我希望能够使用该代码从 ffprobe 打印标签结果,但显然不是。因此,帮助我绑定(bind)该变量,以及稍后如何在 Windows 中的以下代码片段中再次调用它,将不胜感激:
 ffmpeg -i %%a -filter_complex "drawtext=fontfile=/Windows/Fonts/Arial.ttf:x=28:y=650:fontsize=45:fontcolor=white:box=1:boxcolor=black@0.4:text='!DateC!'" -c:a copy output.mp4

我还必须提到我在 StackOverflow 上看到了以下代码:
 ffmpeg -i %%a -filter_complex "drawtext=fontfile=/Windows/Fonts/Arial.ttf:x=28:y=650:fontsize=45:fontcolor=white:box=1:boxcolor=black@0.4:text='%{metadata\:creation_time}'" -c:a copy output.mp4

但是我在让 Windows 识别和打印元数据时遇到了同样的问题。

我确定有问题的文件包含此元数据。

最佳答案

我建议这个未测试的批处理文件代码:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for %%a in ("*.mp4") do (
for /F "delims=" %%G in ('ffprobe.exe -v quiet "%%a" -print_format compact -show_entries format_tags^=creation_time 2^>^&1') do (
set "DateC=%%G"
echo !DateC!
)
)
endlocal

对于 在以 cmd /C 开头的单独命令进程中运行命令行:
ffprobe.exe -v quiet "%%a" -print_format compact -show_entries format_tags=creation_time 2>&1
"%%a"已被当前 *.mp4 文件的名称替换。如果当前 *.mp4 文件名包含空格或这些字符之一,双引号是必需的 &()[]{}^=;!'+,`~ .

有必要用 ^ 转义等号在参数列表中获取正确的命令行传递给 cmd.exe 发起对于 在背景中。
2>&1导致重定向输出写入句柄 标准错误 处理 标准输出 因为 对于 仅捕获写入 的所有内容标准输出 已启动的命令进程。

重定向运算符 >&必须用脱字符 ^ 转义在 对于 当 Windows 命令解释器在执行命令前处理此命令行时,命令行被解释为文字字符 对于 执行嵌入的 ffprobe.exe单独命令进程中的命令行在后台启动。

我没有 ffprobe.exeffmpeg.exe已安装,但我认为那些控制台应用程序会写入有关要处理的文件的信息 标准错误 (标准错误)而不是 标准输出 (标准输出)这是使用 2>&1 的原因获取 捕获的所需信息对于 并分配给环境变量。
"tokens=*""delims=" 相同.两者都导致整行被 捕获。对于 分配给循环变量 G无需使用空格/制表符作为分隔符将其拆分为子字符串(标记),除非行以分号开头,在这种情况下 对于 由于内部默认 eol=;,将完全忽略该行进行处理.

关于batch-file - 在 FOR 循环期间设置变量和调用结果;批处理脚本窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50914094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com