代码实现自动剪辑视频

一、背景:

最近周末的时候经常会拍一些vlog,然后就发现剪辑视频是挺麻烦的一件事情,而且安装和上手ae/pr那些软件不仅费时又麻烦,于是我就想到了编写一段代码来替代那些手动剪辑那些简单视频。

二、步骤:

2.1 下载moviepy模块

pip install moviepy

2.2 编写代码

分别实现对视频、音频和标题的处理,在这个过程中发现moviepy的官方文档跟网上的一些博客比起来是更有用的,毕竟api是在一直更新迭代的 → https://zulko.github.io/moviepy/ 。

show my cleanCode:

import os
import sys
import uuid

from moviepy.audio.fx.audio_fadein import audio_fadein
from moviepy.audio.fx.audio_fadeout import audio_fadeout
from moviepy.audio.io.AudioFileClip import AudioFileClip
from moviepy.editor import VideoFileClip, concatenate_videoclips
from moviepy.video.VideoClip import TextClip
from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip
from moviepy.video.fx.fadein import fadein
from moviepy.video.fx.fadeout import fadeout

AUDIO_FADE_TIME_DURATION = 2
VIDEO_SEGMENT_FADE_TIME_DURATION = 1

def generate_video(dir_path, video_name, title=None):
    video_paths = sorted([os.path.join(dir_path, f) for f in os.listdir(dir_path) if f.endswith('.mp4')])
    print('发现视频: ', [os.path.basename(name) for name in video_paths])
    final_clip = concatenate_videoclips([fade_in_video(fade_out_video(VideoFileClip(path))) for path in video_paths[0:1]]) # 这里取一段

    audio_clip = get_audio_clip(dir_path)
    tmp_path = ''
    if audio_clip:
        sub_audio_clip = audio_clip.subclip(0, final_clip.duration)
        print("插入音频特效")
        faded_audio_clip = audio_fadein(audio_fadeout(sub_audio_clip, AUDIO_FADE_TIME_DURATION),
                                        AUDIO_FADE_TIME_DURATION)
        tmp_path = f"./{str(uuid.uuid1())}.mp3"
        faded_audio_clip.write_audiofile(tmp_path)

        sub_audio_clip.close()
        audio_clip.close()
        faded_audio_clip.close()
    audio_clip = AudioFileClip(tmp_path)

    if audio_clip:
        final_clip = final_clip.set_audio(audio_clip)

    if title:
        txt_clip = TextClip(txt=title, font='simfang.ttf', fontsize=70, color='white')
        txt_clip = txt_clip.set_position('center').set_duration(final_clip.duration)
        final_clip = CompositeVideoClip([final_clip, txt_clip])
        print('插入自定义标题成功')

    print('开始渲染出片')
    final_clip.write_videofile(f"{os.path.join(dir_path, 'output', video_name)}.mp4", threads=4)
    print('自动化剪辑成功')

    if tmp_path:
        audio_clip.close()
        os.remove(tmp_path)


def fade_out_video(video_file_clip):
    print("插入视频转场")
    return fadeout(video_file_clip, VIDEO_SEGMENT_FADE_TIME_DURATION)


def fade_in_video(video_file_clip):
    return fadein(video_file_clip, VIDEO_SEGMENT_FADE_TIME_DURATION)


def get_audio_clip(dir_path):
    for f in os.listdir(dir_path):
        if f.endswith(".mp3"):
            print('发现音频: ', f)
            return AudioFileClip(os.path.join(dir_path, f))


if __name__ == '__main__':
    if len(sys.argv) >= 2 and sys.argv[1]:
        path = sys.argv[1]
    else:
        path = r"D:\Media\bilili\myProject\自动剪辑视频\自动剪辑视频(输出)"
    generate_video(path, 'DreamKite使用代码自动剪辑的视频', "DreamKite使用代码自动剪辑的视频")

代码已经说明了一切了有木有?

三、链接

3.1 附上我的项目代码链接:

可戳→ autoGenerateVideo

虽然看似简单,不过我也是踩了十多个坑,花了一晚上的时间才完整打通整个流程,觉得有用的话欢迎大家点赞关注。

(以上为DreamKite本人原创,转载请附上原文链接)

四、FQA

1、代码执行报错This error can be due to the fact that ImageMagic is not installed on your computer, or (for Windows users) that you didn't specify the path to the ImageMagic binary in file conf.py, or that the path you specified is incorrect

TextClip构造方法报OSError:MoviePy creation of None failed because of the following [WinError 2]系统找不到指定的文件
在这里插入图片描述

解决方式:

1、确保安装了ImageMagick应用,如未安装ImageMagick应用则安装

该应用对应官方下载地址为:
http://www.imagemagick.org/script/index.php,该网站从国内访问非常慢,

我是用国内的华军软件园下载的 →

https://www.onlinedown.net/soft/1111222.htm

2、 如果已经下载了之后,还要修改一下配置文件config_defaults.py
找到moviepy的config_defaults.py模块的配置代码,将下行代码:
IMAGEMAGICK_BINARY = os.getenv(‘IMAGEMAGICK_BINARY’, ‘auto-detect’)
替换为:
IMAGEMAGICK_BINARY = r"C:\Program Files\ImageMagick-7.0.8-Q16\magick.exe" (这里是你具体下载安装的地址)
具体的替换值需要确认ImageMagick安装目录进行更改。

2、没法正常显示中文的字体

由于我标题的渲染使用了中文符号,一开始出现了没有显示的问题,后面将本地的中文字符复制一份放到代码同目录下就发现搞定,

可见我的github链接~~ 参考:https://blog.51cto.com/u_15054050/4515537

(以上为DreamKite本人原创,转载请附上原文链接)

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dream_Kite

你的鼓励,是我不断创作的动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值