我有 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
,但任何命名约定都可以。
有人对如何解决这个问题有什么建议吗?
答案1
我最近一直在合并(连接)视频,我发现这个答案非常有用。首先,安装ffmpeg并确保它在你的路径上。
您必须为每个目录创建一个由以下格式的文本文件组成的文件列表:
file `file1.mp4`
file `file2.mp4`
file `file3.mp4`
然后只需使用以下语法运行 ffmpeg:
ffmpeg -f concat -i filelist.txt -c copy merged.mp4
我手动构建了几个文件,但对于 158 个文件夹,您需要一些自动化。我采取的方法可能是使用FOR
Windows 命令提示符中的命令。您可以使用以下方法生成文件列表:
for /r %f in (*.mp4) do echo file '%~nxf' >>%~dpf\concat.txt
此命令将递归 ( /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
对于每个目录(/d
),切换到该目录(cd
),然后(&
)运行 ffmpeg,生成一个结果文件,该文件位于顶级文件夹的“合并”文件夹中,并以文件夹名称命名。
未经测试,因此使用时请自担风险。(尽管它不会在未经询问的情况下删除或覆盖任何内容。)
答案2
如果这仍然有帮助,我制作了这个批处理脚本。https://github.com/jeromerobles/video_merge