我使用的是 Windows 10 系统,正在处理多摄像机拍摄的视频片段。我将使用一个示例来更好地解释。
例子
我曾经用 6 台摄像机同时拍摄同一个场景。我转储素材并最终得到 6 个单独的文件夹(每个摄像机一个文件夹),每个文件夹都有相同数量的镜头或“镜头”。
相机“拍摄”的照片按顺序编号,但每台相机都有自己的名称。相机 A 文件夹中的文件可能名为 GOPR0023、GOPR0024、GOPR0025,而相机 B 文件夹中的文件可能名为 GOPRO0111、GOPR0112、GOPRO0113。
我想要
然后我想要做的是为每个“镜头”创建文件夹...例如文件夹~\Take1
,其中包括来自相机 A、B、C、D、E、F 等的“镜头 1”。
如何在 Windows 10 中以最少的努力做到这一点?当我有 6 个相机文件夹,每个文件夹有 20 个镜头时,手动执行此操作需要很长时间。
本质上,我想要一个工具,它可以从每个相机文件夹中获取第一个文件(拍摄 1),然后将其剪切并粘贴到新文件夹中,并重复(下一个连续拍摄/文件),直到没有文件剩余。
答案1
将多个文件夹中的连续文件复制到新文件夹(Win 10)
我曾经用 6 台摄像机同时拍摄同一个场景。我转储素材并最终得到 6 个单独的文件夹(每个摄像机一个文件夹),每个文件夹都有相同数量的镜头或“镜头”。然后我想要为每个“镜头”创建文件夹...例如文件夹镜头 1,其中包括来自摄像机 A、B、C、D、E、F 等的镜头 1。
下面是两个如何完成您在问题中陈述的内容的示例,这些示例已被证实可以按照您在我的测试环境中解释的方式工作。
一个脚本不会删除 6 个摄像机源文件夹中的原始镜头或文件另一个将删除原始镜头—我不确定您是否想随后删除原始源文件,因此我提供了一个带有该选项的和一个不带有该选项的。
您需要在以下示例的批处理脚本逻辑中插入所需的变量。您将这些变量保存到文本文档中(即您决定使用的任何一个中的所有内容 - 虽然每个都是单独的脚本/文本文件),然后命名它<something>.cmd
。一旦它是一个cmd
命名文件并且您插入了变量,只需双击即可启动它来执行您的要求。
可变注释
我在批处理脚本中添加了注释,阐明了需要设置的变量(仅变量)和第一个文件夹的名称为了循环但进一步澄清:
- 此处列出的内容
SET CameraRootDir=
需要设置为所有相机文件夹所在的完整路径根级文件夹。假设它们都在同一个标准文件夹中,并且它们都有自己的文件夹,例如CameraA
、CameraB
等等。 - 列出的位置
SET TakeRootDir=
需要将其设置为等于您希望Take1
、Take2
、Take3
等文件夹存在的完整路径级别文件夹。 在您看到
FOR %%C IN (
逻辑的地方,就在其下方,您将看到下面列出的项目CameraA
、CameraB
等等。这将每个都等于唯一的一个文件夹名称,其中每个相机编号将是所有这些文件夹所在的父文件夹下唯一的文件夹名称。只需将每个文件夹替换为相机文件夹名称保存镜头或连续文件的位置——但请保留逗号。CameraA,CameraB,CameraC, CameraD,CameraE,CameraF
如果您的相机文件夹位于“C”盘的根目录中,如
C:\CameraA
、C:\CameraB
等,那么您将需要确保SET CameraRootDir=C:\
就像这样,以便它相等C:\
,并且您在该部分逻辑中列出的上述文件夹名称(上述项目符号引用的项目)将遍历六个,以防有助于澄清;否则,完整路径(如果不是“C”盘的根目录)将是包含这些文件夹的 PARENT\ROOT 文件夹。还假设每个唯一相机文件夹中的第一个镜头或图像文件将是下
Take1
一个,然后是下一个Take2
,依此类推,所以这就是我现在在下面的例子中设置的逻辑。
其他说明
请花一点时间看看这里(接受答案) 以熟悉如何在 Super User 和其他 Stack Exchange 社区中接受答案。如果这能满足您的需求,接受答案将不胜感激。
批处理脚本不删除
@ECHO ON
::: --// The CameraRootDir variable is the root level variable just beneath each separate camera folder name
::: --// The TakeRootDir variable will be the folder location just beneath take1, take2, and so on will be created
SET CameraRootDir=C:\Path\Cameras
SET TakeRootDir=C:\Path\CopiedTakes
IF NOT EXIST "%TakeDir%" MD "%TakeDir%"
::: --// Each item below separate by a comma is the camera folder names just beneath the root level name
::: --// You will need to replace these entries with the actual camera folder name for each of your 6 cameras
FOR %%C IN (
CameraA,CameraB,CameraC,
CameraD,CameraE,CameraF
) DO (
SET TakeCount=0
CALL :CAMERA_MODE "%%~C"
)
GOTO EOF
:CAMERA_MODE
SET CameraDir=%CameraRootDir%\%~1
FOR /F "TOKENS=*" %%T IN (
'"DIR /B /A-D /OD "%CameraDir%\""'
) DO (
CALL :TakeMove "%%~T" "%~1"
)
GOTO EOF
:TakeMove
SET /A TakeCount=%TakeCount%+1
IF NOT EXIST "%TakeRootDir%\Take_%TakeCount%" MD "%TakeRootDir%\Take_%TakeCount%"
ECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"
GOTO EOF
带删除功能的批处理脚本
@ECHO ON
::: --// The CameraRootDir variable is the root level variable just beneath each separate camera folder name
::: --// The TakeRootDir variable will be the folder location just beneath take1, take2, and so on will be created
SET CameraRootDir=C:\Path\Cameras
SET TakeRootDir=C:\Path\CopiedTakes
IF NOT EXIST "%TakeDir%" MD "%TakeDir%"
::: --// Each item below separate by a comma is the camera folder names just beneath the root level name
::: --// You will need to replace these entries with the actual camera folder name for each of your 6 cameras
FOR %%C IN (
CameraA,CameraB,CameraC,
CameraD,CameraE,CameraF
) DO (
SET TakeCount=0
CALL :CAMERA_MODE "%%~C"
)
GOTO EXIT
:CAMERA_MODE
SET CameraDir=%CameraRootDir%\%~1
FOR /F "TOKENS=*" %%T IN (
'"DIR /B /A-D /OD "%CameraDir%\""'
) DO (
CALL :TakeMove "%%~T" "%~1"
)
GOTO EOF
:TakeMove
SET /A TakeCount=%TakeCount%+1
IF NOT EXIST "%TakeRootDir%\Take_%TakeCount%" MD "%TakeRootDir%\Take_%TakeCount%"
ECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"
DEL /Q /F "%CameraDir%\%~1"
GOTO EOF
更多资源和阅读材料
答案2
如果你不想要安装或者编码工具:
- 在资源管理器中对树进行搜索
- 对结果进行相应排序
- 选择并拖放属于目标目录的文件。
任何更舒适的东西都需要一些软件或批处理,它们可能存在,也可能不存在。