Batch file 使用批处理文件计数并将第n个文件复制到新目录,多次传递

Batch file 使用批处理文件计数并将第n个文件复制到新目录,多次传递,batch-file,cmd,command,Batch File,Cmd,Command,我正在用IPCAM做一个延时视频。从黄昏到黎明,我每15/20秒拍一次照片。每个文件夹都标有日期、每天等 我制作了一个timelapse视频,使用每天的所有文件,使用大量文件,目前为3750 我还想做3个单独的时间推移视频使用一组图像 方程式是 (总文件数)/(25 fps)/(3秒长)=要跳过多少个文件 范例 3750/25/3=要跳过的50个文件 所以我现在正在使用这个代码 mkdir "3" @echo off set Counter=0 for %%f in (*.jpg) do ca

我正在用IPCAM做一个延时视频。从黄昏到黎明,我每15/20秒拍一次照片。每个文件夹都标有日期、每天等

我制作了一个timelapse视频,使用每天的所有文件,使用大量文件,目前为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个文件复制到该文件夹中。然后我可以使用文件夹中的文件制作timelapse视频

然后我必须编辑批处理文件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
&


希望这有点道理。

我也会使用批处理来计算文件和计算

@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。

您可以尝试类似的方法,输入要创建的每个目录的秒数和要跳过的文件数。(假设批处理文件与JPG文件位于同一目录中,并且当前目录也设置为此目录。)

要跳过的文件数可以通过获取当前目录中的JPG文件数,除以每秒帧数(可以定义为脚本中的常量变量)和用户输入的秒数来计算。我不确定这是否是您想要的,因为您上一个示例中的“125”似乎已关闭


dbenham的以下回答说明了如何获取目录中的数字文件:

谢谢,我想问一下如何计算文件,这很好。将有一个3秒的剪辑,一个10秒的剪辑和最后一个“30”不是一个剪辑,但我想保存30个原始文件,从那天起,我可以删除文件夹中的其余文件,以节省空间。目前每天大约10gb的容量很快就会增加。保存较小的剪辑和仅30张照片会将其裁剪得很单调。一旦一个月/一年过去了,我可以对整个月/一年进行时间间隔,从30个原始数据中进行挑选。编辑批次以包括计算(未经测试),这非常有效。正如我所需要的。我会尝试使用上面的链接自动计算,希望工作更容易:)非常感谢,这比我想象的要好。3和10都是文件夹上的斑点“30”实际上只是我想保留的30张原始照片,而不是30秒的剪辑。我试着自己修改它,但我一事无成。与其除以25,不如除以秒。它只需要除以30。您是否认为可以将30个文件保存到该特定文件夹中,并保持3个和10个文件夹不变。再次非常感谢,你没有意识到这将节省多少时间机械文件夹30包含30 jpg的解决方案传奇,非常感谢你的专业知识:):)工程像一个梦想!!
@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
@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
}