批量合并视频文件集?

批量合并视频文件集?

我有 158 个文件夹,每个文件夹包含 5-15 个视频文件,每个视频文件长度为几分钟。我想将所有视频合并为每个文件夹一个视频,然后删除其余视频。

文件夹以某一年份的日期命名,且日期之间有间隔(,,,,,…… 01.11,等等),其中的文件命名如下:01.1201.1301.1401.1801.2802.01

ds_AAAAA_BB_CCC_480.mp4

第一个空格 ( AAAAA) 是该文件夹中所有文件的数字。对于文件夹01.11,数字为03075,之后每个文件夹的数字增加一。

第二个空白(BB)是文件的顺序,从 01 到该文件夹​​中的文件数量。

第三个空格(CCC)是一组三个字母,每个文件都不同,可以忽略。

举几个例子,第一个文件夹 ( 01.11) 中的第一个文件是ds_03075_01_nws_480.mp4。第四个文件夹 ( ) 中的最后一个(第 7 个)文件01.14ds_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 个文件夹,您需要一些自动化。我采取的方法可能是使用FORWindows 命令提示符中的命令。您可以使用以下方法生成文件列表:

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

相关内容