现在,我正在使用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没有使用正则表达式选择基于字符串的行。
答案 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