背景

人力资源部需要负责公司员工的培训工作,面下提供培训管理和信息发布收集,面上提供资源整合和数据分析。接到主管的新任务:应上级主观部门需要,收集所有培训视频,去除声音并提交数联网系统。能做视频剪辑的软件有很多,比如premiere、剪映等等,但是一个个视频去导入、消音、再导出实在是太痛苦了,还得是python来批量自动化操作。

目的

应对主管的新需求,拒绝傻瓜式重复操作,能偷懒就偷懒

应用

要使用Python进行自动化剪辑视频,您需要使用Python中的视频处理库—MoviePy:MoviePy是Python中的视频处理库,可以帮助您剪辑、合并和裁剪视频。

数据样式

因为涉及到公司保密信息,这里在b站随便下了个视频作为数据

音视频合流 python_视频处理

音视频合流 python_ide_02

 

总时长四分半,并且是有声音信息的

视频分割部分

库和路径设置
from moviepy.editor import VideoFileClip
import os

path1 = r"E:\监控室\6.19"
outpath = r"E:\监控室\再分割"
读取、切分及保存
for each in os.listdir(path1):
    files = os.listdir(os.path.join(path1, each))
    for file in files:
        print(path1 + '\\' + each + '\\' + file)
        clip = VideoFileClip(path1 + '\\' + each + '\\' + file)
        turn = int(float(clip.duration) // 60)
        start = 0
        end = 60
        for i in range(turn):
            try:
                subclip = clip.subclip(start, end)
                subclip.write_videofile(outpath + '\\' + str(file).strip() + str(i) + ".mp4")
                start += 70
                end += 70
            except (IOError, ZeroDivisionError) as encode:
                print("错误,错误代码为:" + str(encode))
        clip.close()
  1.  利用os库的listdir()获取第一层文件夹下的所有文件夹
  2. 用join()将路径和文件夹进行组合形成新路径,再用一次listdir()触及下一层中的文件
  3. 形成的路径+文件名的组合作为参数传入VideoFileClip()函数中进行切分
  4. 总时长是4分半,按60秒一切,turn变量就是计算出来的切分次数
  5. 设置切分的开始时间start和结束时间end,以切分次数进行循环导出程序的操作
  1. 以导出路径+文件名+第几个+文件格式为参数,输出视频
  2. 输出当前视频后,切分的时间点发生变化,即起始点和结束点每次循环加个60~70秒
  3. 第二个视频的输出重复上述操作
  1. 结束切片

视频消音部分

from moviepy.video.io.VideoFileClip import VideoFileClip
import os
import tqdm
inputs = 'E:/监控室/6.15/'
outputs = 'E:/监控室/视频处理/程序消音'
filenames = os.listdir(inputs)
for idx, element in enumerate(tqdm.tqdm(filenames)):
    video = VideoFileClip(inputs+element)
    video_without_audio = video.without_audio()
    video_without_audio.write_videofile(outputs + "{}.mp4".format(element),  threads=8, fps=24)

对于切分好的视频,以enumerate函数进行遍历,以without_audio函数去除声音,然后保存当前视频文件。

threads参数为线程数,线程越多,同时处理的视频数量越多,速度越快,fps为帧速率,一般为24~25,或者更高,太低了视频会很假。

输出结果

音视频合流 python_自动化_03

音视频合流 python_自动化_04

 切分成了4个,不足一分钟的没有保留,视频每个一分钟多1秒,且音频信息消失了。

问题

当前代码可以作为视频剪辑工具,比较适合轻量级视频(MB级别)的批量操作,对于比较大的视频(GB级别)的视频处理起来会非常慢,这时候或许还不如视频剪辑软件。一般情况下用python处理,开的线程数量越多,电脑GPU性能越好,视频剪辑效率越高。