批处理文件删除具有相同变量

时间:2015-06-17 13:41:22

标签: regex batch-file command-line ffmpeg line

现在,我正在使用ffmpeg使用以下命令验证视频中的裁剪值:

ffmpeg -i "INPUT.mov" -vf "cropdetect=112:1:0" -f null NUL 2> "Crop_Values.txt"

输出重定向到TXT文件,但大多数裁剪值都相同,我尝试创建批处理文件以删除具有重复裁剪值的行。

您可以在下面找到TXT文件的一部分:

[Parsed_cropdetect_0 @ 00000000003b7f00] x1:624 x2:1297 y1:426 y2:675 w:672 h:240 x:626 y:432 pts:54 t:2.250000 crop=672:240:626:432
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:624 x2:1297 y1:426 y2:675 w:672 h:240 x:626 y:432 pts:55 t:2.291667 crop=672:240:626:432
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:624 x2:1297 y1:416 y2:675 w:672 h:256 x:626 y:418 pts:56 t:2.333333 crop=672:256:626:418
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:0 x2:1297 y1:321 y2:937 w:1296 h:608 x:2 y:326 pts:57 t:2.375000 crop=1296:608:2:326
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:0 x2:1362 y1:210 y2:937 w:1360 h:720 x:2 y:214 pts:58 t:2.416667 crop=1360:720:2:214
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:0 x2:1919 y1:142 y2:937 w:1920 h:784 x:0 y:148 pts:59 t:2.458333 crop=1920:784:0:148
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:0 x2:1919 y1:142 y2:937 w:1920 h:784 x:0 y:148 pts:60 t:2.500000 crop=1920:784:0:148
[Parsed_cropdetect_0 @ 00000000003b7f00] x1:0 x2:1919 y1:142 y2:937 w:1920 h:784 x:0 y:148 pts:61 t:2.541667 crop=1920:784:0:148

每一行都有与被分析的视频帧相关的信息(包括时间),但最后,我无法通过数千行来发现作物值发生变化的时间。

所有后续行与前一行具有相同crop=值的行将被丢弃,我希望保留整行(因为所有其他信息)。

这是我提出的批处理文件,使用来自其他类似脚本的信息:

@echo off
type NUL > New_Crop_Values.txt
for /f "tokens=* delims=" %%a in (Crop_Values.txt) do (
  findstr /irxec:".*crop.*" New_Crop_Values.txt > NUL || >> New_Crop_Values.txt echo.%%a
)

不幸的是,这似乎不起作用。我是一个新手,所以我无法理解为什么findstr没有使用正则表达式选择基于字符串的行。

1 个答案:

答案 0 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

set "lastCrop="
(for /F "delims=" %%a in (Crop_Values.txt) do (
   set "line=%%a"
   if "!line:* crop=!" neq "!lastCrop!" (
      echo %%a
      set "lastCrop=!line:* crop=!"
   )
)) > New_Crop_Values.txt