前言
本文提供将多个视频拼接为一个视频的Python工具代码,其中有一些限制条件,下面的代码说明会提到。
环境依赖
ffmpeg环境安装,可以参考:windows ffmpeg安装部署
本文主要使用到的不是ffmpeg,而是ffprobe也在上面这篇文章中的zip包中。
ffmpy安装:
pip install ffmpy -i https://pypi.douban.com/simple
代码
#!/user/bin/env python
# coding=utf-8
"""
###########################
Python学习交流Q群101677771
###########################
@project : csdn
@author : 剑客阿良_ALiang
@file : concat_video.py
@ide : PyCharm
@time : 2021-12-23 15:23:16
"""
from ffmpy import FFmpeg
import os
import uuid
import subprocess
# 视频拼接
def concat(video_list: list, output_dir: str):
if len(video_list) == 0:
raise Exception('video_list can not empty')
_ext = check_format(video_list)
_fps = check_fps(video_list)
_result_path = os.path.join(
output_dir, '{}{}'.format(
uuid.uuid1().hex, _ext))
_tmp_config = make_tmp_concat_config(video_list, output_dir)
ff = FFmpeg(inputs={'{}'.format(_tmp_config): '-f concat -safe 0 -y'}, outputs={
_result_path: '-c copy'})
print(ff.cmd)
ff.run()
os.remove(_tmp_config)
return _result_path
# 构造拼接所需临时文件
def make_tmp_concat_config(video_list: list, output_dir: str):
_tmp_concat_config_path = os.path.join(output_dir, '{}.txt'.format(uuid.uuid1().hex))
with open(_tmp_concat_conf