如何使用 ffmpeg 和 Python 来连接视频文件

本文将介绍如何使用 ffmpeg 和 Python 来连接视频文件。一般的使用情况是,如果您录制教程,并有几个视频片段(在不同的点上有开始和停止),您想将它们合并成一个视频片段。我发现这样编辑起来更容易。

  • 注意事项 1:我假设视频具有相同的编解码器。如果您想连接不同编解码器的视频,请参阅此处:连接具有不同编解码器的文件
  • 注意事项 2:已经安装了 ffmpeg。

安装好ffmpeg,我们就可以分三步进行连接。

步骤 1:获取文件的名称

创建一个包含所有要连接的文件的列表,并将它们放入一个 .txt 文件中。假设我们在名为 clips 的文件夹中有两个视频片段:clip1.mp4 和 clip2.mp4。我们的 .txt 文件格式应如下所示:

file clips/clip1.mp4
file clips/clip2.mp4

我们不需要手动执行此操作,而是使用 python 和两个函数:

(1)获取想要连接的文件列表和

(2)一个简单创建文件的函数。

import os

def get_files_os(folder_path):
    files = []
    for f in os.listdir(folder_path):
        full_path = os.path.join(folder_path, f)
        if os.path.isfile(full_path):
            files.append(folder_path + f)
    return files
folder_path = 'clips/'

在上面的示例中,我们正在遍历folder_path中的文件,我们使用 os.path.join(folder_path, f)folder_path中的文件创建一个绝对路径,然后如果 full_path 是一个文件,我们就将其追加到空文件列表中。

由于只有当视频文件具有相同的编解码器时,连接才会起作用,因此我们可能只想选择具有相同扩展类型的文件:

def get_files_os(folder_path):
    files = []
    for f in os.listdir(folder_path):
        full_path = os.path.join(folder_path, f)
        # only our mp4 files!!!!o
        if os.path.isfile(full_path) and f.lower().endswith('.mp4'):
            files.append(folder_path + f)
    return files

为了检查,可以运行print(get_files_os(folder_path))并打印出以下内容:

['clips/clip1.mp4', 'clips/clip2.mp4']

步骤 2:创建一个包含剪辑名称的 txt 文件

接下来,我们把列表中的每个项目写入 .txt 文件。在进行连接时,我们需要在每个项目前加上 file 和空格:

def create_text_file(files):
    with open("vid_list.txt", 'w') as file:
        for f in files:
            file.write('file'+ " " + f + '\n')

这样就会创建一个名为 vid_list.txt 的文件,看起来像这样:

file clips/clip1.mp4
file clips/clip2.mp4

此时如果愿意,我们应该重新排列,因为 ffmpeg 会先连接 clip1,然后连接 clip2。例如,我们可以先连接 clip2,然后再连接 clip1。

print("folder_path/".join(get_files_os(folder_path)))

步骤 3:使用 ffmpeg 连接

在最后一步中,我们使用 ffmpeg 来连接剪辑。在终端中,将写下以下内容:

ffmpeg -f concat -i vid_list.txt output.mp4

写入 ffmpeg,然后用 -f concat 表示要连接,用 vid_list.txt 表示我们的输入文件,然后指定输出文件。这里的文件名是 output.mp4,但也可以随意命名。

代码

import os

def get_files_os(folder_path):
    files = []
    for f in os.listdir(folder_path):
        full_path = os.path.join(folder_path, f)
        if os.path.isfile(full_path) and f.lower().endswith('.mp4'):
            files.append(folder_path + f)
    return files

def create_text_file(files):
    with open("vid_list.txt", 'w') as file:
        for f in files:
            file.write('file'+ " " + f + '\n')

folder_path = 'clips/'
print(get_files_os(folder_path))
create_text_file(get_files_os(folder_path))p

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/52447.html

(0)

相关推荐

发表回复

登录后才能评论