我正在使用IPCAM进行时间推移视频。我从黄昏到黎明每15/20秒拍照。每个文件夹每天都标有日期等等。
我使用大量文件(目前为3750)使用每天的所有文件制作一个间隔拍摄视频。
我还想使用一定数量的图像制作3个单独的定时视频。
方程式
(总文件数)/(25 fps)/(3秒长)=要跳过的文件数
例如
3750/25/3 =要跳过的50个文件
所以我现在正在使用此代码
mkdir "3"
@echo off
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :p
:p
set /a Counter+=1
set /a X=Counter %% "50"
if %X%==0 copy %1 "3"
goto :eof
这会创建目录" 3"并将每个第50个文件复制到该文件夹。然后我可以使用文件夹中的文件制作间隔拍摄视频。
然后,我必须编辑批处理文件10秒钟,然后编辑30张图像,然后分别运行。
如何将所有行添加到一个批处理文件中,这样我每次只需要编辑一个文件?
mkdir "10"
@echo off
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :p
:p
set /a Counter+=1
set /a X=Counter %% "15"
if %X%==0 copy %1 "10"
goto :eof
&安培;
mkdir "30"
@echo off
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :p
:p
set /a Counter+=1
set /a X=Counter %% "125"
if %X%==0 copy %1 "30"
goto :eof
希望这有点道理。
答案 0 :(得分:0)
我还会使用批处理来计算文件并进行计算。
@echo off
:: get total number of files
for /f %%A in ('dir /b *.jpg ^| find /v /c ""') do set /A total=%%A
:: create subfolders and calculate skip
for %%A in (3 10 30) Do (
mkdir "%%A"
if %%A neq 30 (
Set /A "skip%%A=total/25/%%A
) Else (
Set /A "skip%%A=total/%%A
)
)
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :EOF
:p
set /a "Counter+=1,X=Counter%%skip3,Y=Counter%%skip10,Z=Counter%%skip30"
if %X%==0 copy %1 "3"
if %Y%==0 copy %1 "10"
if %Z%==0 copy %1 "30"
goto :eof
已修改更改了文件夹30以包含30个jpg。
答案 1 :(得分:0)
您可以尝试这样的操作,您必须输入要创建的每个目录的秒数以及要跳过的文件数。 (假设批处理文件与JPG文件位于同一目录中,并且当前目录也设置为此目录。)
@echo off
:MainLoop {
cls
setlocal enabledelayedexpansion
set fileCount=0
set /p "duration=Seconds: "
set /p "interval=Files to skip: "
mkdir "%duration%"
for %%f in (*.jpg) do (
set /a fileCount+=1
set /a frame=fileCount%%interval
if !frame! == 0 (
copy "%%f" "%duration%"
)
)
pause
endlocal
goto :MainLoop
}
要跳过的文件数可以通过获取位于当前目录中的JPG文件的数量,除以每秒帧数(可以在脚本中定义为常量变量)和秒数来计算用户已输入。我不确定这是否是你想要的,因为你上一个例子中的“125”似乎已经关闭了。
dbenham的以下答案显示了如何获取目录中的数字文件:https://stackoverflow.com/a/11005300/7107236