本文将介绍如何使用 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