use*_*--- 2 video windows batch merge
我有 158 个文件夹,每个文件夹包含 5-15 个视频文件,每个文件长几分钟。我想将所有视频合并到每个文件夹一个视频中,然后删除其余的。
文件夹以某一年的日期命名,之间有间隔(01.11
、01.12
、01.13
、01.14
、01.18
... 01.28
、02.01
等),其中的文件命名如下:
ds_AAAAA_BB_CCC_480.mp4
第一个空白 ( AAAAA
) 是该文件夹中所有文件都相同的数字。对于文件夹01.11
,数字为03075
,此后每个文件夹的数字加一。
第二个空白 ( BB
) 是文件的顺序,从 01 到该文件夹中的文件数量。
第三个空格 ( CCC
) 是一组三个字母,每个文件各不相同,可以忽略。
举几个例子,第一个文件夹 ( 01.11
) 中的第一个文件是ds_03075_01_nws_480.mp4
. 第四个文件夹 ( ) 中的最后一个(第 7 个)文件01.14
是ds_03078_07_zen_480.mp4
.
理想情况下,我希望新文件位于单独的文件夹中(只是为了方便删除旧文件),并以 、 等格式命名01_11.mp4
,01_12.mp4
但任何命名约定都可以。
有人对如何解决这个问题有任何建议吗?
我最近一直在合并(连接)视频,我发现这个答案非常有用。首先,安装ffmpeg并确保它在您的路径上。
您必须为每个目录创建一个文件列表,其中包含以下格式的文本文件:
file `file1.mp4`
file `file2.mp4`
file `file3.mp4`
Run Code Online (Sandbox Code Playgroud)
然后你只需使用以下语法运行 ffmpeg:
ffmpeg -f concat -i filelist.txt -c copy merged.mp4
Run Code Online (Sandbox Code Playgroud)
我是为一些文件手动构建的,但对于 158 个文件夹,您需要一些自动化。我采取的方法可能是使用FOR
Windows 命令提示符中的命令。您可以使用以下方法生成文件列表:
for /r %f in (*.mp4) do echo file '%~nxf' >>%~dpf\concat.txt
Run Code Online (Sandbox Code Playgroud)
此递归 ( /r
) 扫描当前文件夹和所有子文件夹中的 MP4 文件,并将名称和扩展名(即位)回显(打印)nx
到每个子文件夹中的单独文件(该dp
位获取驱动器号和路径)。该>>
位使其将文件名附加到列表中,因此如果运行两次,您将得到一个重复的列表。concat.txt
因此,在运行命令之前删除所有文件。
然后你想在每一个上运行 ffmpeg。你需要类似的东西:
for /d %f in (*) do cd %~ff & ffmpeg -f concat -i concat.txt -c copy ..\merged\%~nf.mp4
Run Code Online (Sandbox Code Playgroud)
对于每个目录 ( /d
),更改为 ( cd
),然后 ( &
) 运行 ffmpeg,生成一个结果文件,该文件位于顶级文件夹的“merged”文件夹中,并以文件夹名称命名。
未经测试,因此使用风险自负。(尽管它不会在没有询问的情况下删除或覆盖任何内容。)