Windows批处理以多个变量分隔同一文件夹中的文件
Posted
技术标签:
【中文标题】Windows批处理以多个变量分隔同一文件夹中的文件【英文标题】:Windows batch to separate files on the same folder in multiple variables 【发布时间】:2017-01-14 02:31:42 【问题描述】:我有一个文件夹,里面有很多 4 通道 dvr 的录像。
每个文件都有特定的摄像机编号以及录制的开始和结束帧。
IE:对于 2 分钟的录制,我将这 8 个文件放在名为“videos”的文件夹中:
ch1_1-1800.avi
ch2_1-1800.avi
ch3_1-1800.avi
ch4_1-1800.avi
ch1_1801-3600.avi
ch2_1801-3600.avi
ch3_1801-3600.avi
ch4_1801-3600.avi
我可以使用此命令行手动将帧间隔的文件合并到单个 704x480 .avi 文件中
ffmpeg -i ch1_1-1800.avi -i ch1_2-1800.avi.avi -i ch3_1-1800.avi.avi -i ch4_1-1800.avi.avi -filter_complex "nullsrc=size=704x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=352x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=352x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=352x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=352x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=352 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=352:y=240" -b:v 2000k ch1234_1-1800.avi
但我正在寻找一种方法来使用 Windows 批处理文件自动处理“视频”文件夹中的所有文件。我使用 FOR 循环尝试了一些事情,但我不知道是否可以在同一个循环中设置多个变量。
有什么想法吗?
提前致谢
【问题讨论】:
“我尝试了一些东西......”什么东西?请分享!并且您需要提供明确的标准,以便确定哪些文件属于一起! 我有 4 个相同帧间隔的通道需要合并在一起 我认为文件名和 ffmpeg 示例上的帧间隔是关于文件组的明显提示。我的错。如上例所示,ch1-ch4 是频道,1-1800 和 1801-3600 是相对于视频录制的第一分钟和第二分钟的帧间隔。 【参考方案1】:将每组文件相关参数构建到环境变量中。然后在调用批处理文件时使用这些累积变量。
setlocal EnableDelayedExpansion
SET I_ARGS=
SET OTHER_ARGS=
for /f "tokens=*" %%a in ('dir /b *.avi') do (
SET I_ARGS=!I_ARGS! -i %%a
SET OTHER_ARGS=!OTHER_ARGS! blah
)
ffmpeg %I_ARGS% %OTHER_ARGS%
这显示了为 'dir /b *.avi' 返回的每个文件 (%%a) 构建环境变量的方法
【讨论】:
我还是不明白。您在找到的每个文件中将 I_ARGS 变量设置为“自动递增”,但如果我有超过 4 个文件,它会继续在同一命令行中添加“-i”。 你能发布你的更新代码和它生成的更新字符串 使用:@ECHO OFF setlocal EnableDelayedExpansion SET I_ARGS= SET OTHER_ARGS= FOR /f "tokens=*" %%a in ('dir /b *.avi') do ( SET I_ARGS=!I_ARGS! -i %%a SET OTHER_ARGS=!OTHER_ARGS! blah ) ECHO %I_ARGS% %OTHER_ARGS%
给我输出-i ch1_1-900.avi -i ch1_901-1800.avi -i ch2_1-900.avi -i ch2_901-1800.avi -i ch3_1-900.avi -i ch3_901-1800.avi -i ch4_1-900.avi -i ch4_901-1800.avi blah blah blah blah blah blah blah blah
并且我需要将相同帧间隔的一组ch1、ch2、ch3、ch4分开并运行ffmpeg命令。以上是关于Windows批处理以多个变量分隔同一文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章