使用python合并多个视频,并添加背景音乐|Python 主题月

本文正在参加「Python主题月」,详情查看https://juejin.cn/post/6979532761954533390/

看到掘金有主题月活动,忽然间想起来以前为了帮公司运营搞视频合并 写过一个程序 今天翻出来 作为我的参加文章 使用moviepy以及subprocess 来进行音频和视频的操作

```js from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioClip, AudioFileClip import os, re, random from natsort import natsorted import time from itertools import product import subprocess from pydub import AudioSegment import random

class Compose(): def init(self): self.audios = 'test.mp3' self.audiolist = [] self.videopath = "" self.vdpathlist = [] self.count = 0 self.hechengpath = "" self.ismakehunhe=False

def check_num(self, arr):  # 过滤mp3
    pattern = re.compile('[0-9]+')
    for v in arr:
        match = pattern.findall(v)
        if match and 'mp3' not in v:
            return True
        else:
            return False

def takevideo(self):  # 分组mp3
    try:
        os.remove(self.audios)
    except:
        pass
    self.hechengpath = os.getcwd()
    videolist = []
    for root, dirs, names in os.walk(self.hechengpath):
        if self.check_num(names):
            self.vdpathlist.append(root)
            names = [root + '\\' + name for name in names]
            videolist.append(names)
        for name in names:
            if "mp3" in name:
                fromdir = os.path.join(root, name)
                self.audiolist.append(fromdir)
    return videolist

def video_add_mp3(self, times, file_name, mp3_file):  # 给视频添加声音
    outfile_name = file_name.split('.')[0] + '-end.mp4'
    cmd = "ffmpeg -i %s -i %s  -t 7.1 -y %s"
    subprocess.call(cmd % (mp3_file, file_name, times, outfile_name))
    # subprocess.call("ffmpeg -i %s -i %s -t %s -y %s" % (mp3_file, file_name, times, outfile_name))
    return outfile_name

def takename(self, i):  # 拼接视频名字
    strs = "".join(list(i))
    for j in self.vdpathlist:
        strs = strs.replace(j, "").strip('\\').replace(".mov", "").replace(".MOV", "").replace(".mp4", "").replace(".mp3", "")
    strs = strs.replace("\\", "+")
    return strs

def synthetic_two_audio(self):  # 把两个声音混合
    if self.is_make_hunhe:
        if len(self.audiolist) > 1:
            mp3a = self.audiolist[0]
            mp3b = self.audiolist[1]
            subprocess.call(
                "ffmpeg -i %s -i %s -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 %s" % (mp3a, mp3b, self.audios))
        else:
            self.audios = self.audiolist[0]
    else:
        self.audios=random.choice(self.audiolist)

def hecheng(self):  # 合成声音
    lists = self.takevideo()
    for i in product(*lists):
        self.synthetic_two_audio()
        videopath = self.takename(i) + ".mp4"
        videolist = [VideoFileClip(j, audio=True).resize([1080, 1920]) for j in i]
        finalclip = concatenate_videoclips(videolist, method="compose")
        times = finalclip.duration
        finalclip.write_videofile(filename=videopath, codec='libx264', bitrate=('1000000', '2000000',), threads=5)
        self.video_add_mp3(times, videopath, self.audios)
        # os.remove(videopath)

if name == "main": cmp = Compose() cmp.hecheng()

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suddle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值