admin管理员组

文章数量:1530044

文章目录

  • 一、背景:
  • 二、步骤:
  • 三、链接
    • 3.1 附上我的项目代码链接:
  • 四、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`
    • 2、没法正常显示中文的字体

一、背景:

最近周末的时候经常会拍一些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/script/index.php,该网站从国内访问非常慢,

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

https://www.onlinedown/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/u_15054050/4515537

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

本文标签: 剪辑代码视频