moviepy使用教程

一、剪辑成果

未来

二、遇到问题

尝试使用ffmpeg、moviepy、pydub,其中pydub主要是对音频的处理,moviepy对视频音频处理,ffmpeg视频、音频均可以,只是ffmpeg是命令行,在pycharm用起来不习惯,moviepy和pydub都是基于ffmpeg的python模块,
而ffmpeg也有python命令调用模块——ffmpeg-python是ffmpeg的命令调用库,链接: ffmpeg-python.
在这里插入图片描述

但是csdn上大部分都是moviepy的教程,关于ffmpeg-python的教程非常少,因而再次我用的也是moviepy

moviepy和pydub直接用pip安装即可

pip install moviepy
pip install pydub

遇到问题:

AttributeError: 'str' object has no attribute 'decode'
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 7: invalid start byte

在这里插入图片描述
第一个报错比较好解决,就是将decode去掉,但是造成第二个报错,两个报错互相循环,在github提问也没有回复。后来我下载了python3.8(原来用的是python3.7),重新pip installer moviepy之后就好了,pudub也是如此

三、moviepy方法分享

方法推送到了github上,下载地址:链接: video_method.

一、音频剪辑方法

from pydub import AudioSegment
from ffmpeg import audio


class Pydub_method():
def __init__(self,path1,path2,path3):
    # 1秒=1000毫秒
    self.SECOND = 1000#单位必须是毫秒
    self.path1 = path1
    self.path2 = path2
    self.path3 = path3



def get_audio(self,start_time,end_time):
    """音频剪辑"""
    song = AudioSegment.from_file(self.path1, format="mp3")
    # song_ = AudioSegment.from_file(r"J:\\vedio\\manager\\audio\\千秋令和朝代歌\\弥撒与千秋令混合.mp3", format="mp3")-6
    # song_ =song_.fade_in(5000).fade_out(5000)
    # newsong_1 = song[:55*SECOND]
    # newsong = newsong_1+song_+ song[60*SECOND:]
    newsong = song[start_time* self.SECOND:end_time * self.SECOND]
    newsong.export(self.path2)

def audio_concat(self):
    """音频混合"""
    sound1 = AudioSegment.from_file(self.path1) - 1
    sound2 = AudioSegment.from_file(self.path2) - 6
    sound2.fade_in(5000).fade_out(5000)

    played_togther = sound1.overlay(sound2)
    played_togther.export(self.path3)

def audio_fade(self,start_time,end_time):
    """音频淡入淡出"""
    song= AudioSegment.from_file(self.path1)
    song_1 = song.fade_in(start_time*self.SECOND).fade_out(end_time*self.SECOND)
    song_1.export(self.path2)


def audio_fast(self,speed):
    """音频加速,没有找到pydub中的音频加速"""
    audio.a_speed(self.path1, speed, self.path2)

二、视频剪辑方法

from moviepy.editor import *

class Moviepy_method():
def __init__(self,path1,path2,path3="‪J:\vedio",path4 = "‪J:\vedio\original"):
    self.input_path = path1.strip("\u202a")
    self.path2 = path2.strip("\u202a")
    self.path3 = path3.strip("\u202a")
    self.path4 = path4.strip("\u202a")

def Getaudio(self):
    """音频提取"""
    vedio1 = VideoFileClip(self.input_path.strip("\u202a"))
    audio1 = vedio1.audio
    audio1.write_audiofile(self.path2)


def getvideo(self,start_time,end_time):
    """视频提取"""
    vedio1 = VideoFileClip(self.input_path)
    # vedio2 = vedio1.without_audio()
    video2 = vedio1.subclip(start_time, end_time)
    # video4 = vedio2.subclip(9,-1)
    video2.write_videofile(self.path2)


def video_fast(self,number):
    """视频加速"""
    clipVideo = VideoFileClip(self.input_path)
    newclip = clipVideo.fl_time(lambda t: number * t, apply_to=['mask'], keep_duration=True)
    duration = int(clipVideo.duration / 2)
    newclip = newclip.subclip(0,duration)
    newclip.write_videofile(self.path2)

def video_drop(self):
    """视频无声"""
    video = VideoFileClip(self.input_path)
    video = video.without_audio()
    video.write_videofile(self.path2)

def video_concat(self):
    """视频合成"""
    video1 = VideoFileClip(self.input_path).fx(vfx.resize, width=848)
    video2 = VideoFileClip(self.path2).fx(vfx.resize, width=848)
    video3 = VideoFileClip(self.path3).fx(vfx.resize, width=848)
    # video4 = VideoFileClip(path4)
    final_clip = concatenate_videoclips([video1, video2, video3], method="compose")
    final_clip.to_videofile(self.path4, fps=24, remove_temp=False)

def audio_concat_vedio(self,audio_path):
    """音频视频合成"""
    video = VideoFileClip(self.path)
    audio = AudioFileClip(audio_path)
    video = video.set_audio(audio)  # 不能直接是audio的路径
    video.write_videofile(self.path2)
### MoviePy 2.1.1 剪辑基类 Clip 的使用教程 #### 定义与特性 `Clip` 是 MoviePy 中的核心抽象类,代表一段媒体片段,无论是视频还是音频。所有的具体剪辑类型都继承自这个基类[^1]。 #### 创建基本剪辑对象 为了创建一个基于现有文件的 `VideoClip` 或者 `AudioClip` 对象,通常会调用相应的子类构造函数: 对于视频剪辑: ```python import moviepy.editor as mp video_clip = mp.VideoFileClip("example_video.mp4") ``` 对于音频剪辑: ```python audio_clip = mp.AudioFileClip("example_audio.wav") ``` 这些命令分别读取指定路径下的多媒体文件并初始化对应的剪辑实例[^3]。 #### 获取和设置属性 通过访问特定的方法或属性来操作剪辑的内容。比如要获取视频尺寸可以用 `.size` 属性;而如果想要调整某个剪辑的时间长度,则可以通过修改其持续时间(`duration`)属性实现。 示例如下所示,这里展示了如何取得第一个视频文件的分辨率,并将其应用到第二个视频上: ```python clip1 = mp.VideoFileClip("1.mp4") target_size = clip1.size clip2 = mp.VideoFileClip("2.mp4", target_resolution=target_size[::-1]) ``` 注意这里的 `[::-1]` 表达式用于交换宽度和高度值的位置以适应不同的纵横比需求。 #### 执行基础编辑操作 利用提供的 API 可轻松完成诸如裁切、连接等常见的编辑任务。例如截取某段视频中的部分内容可通过如下方式达成: ```python subclip = video_clip.subclip(5, 10) # 提取出第5秒至第10秒之间的部分 ``` 又或者是将多个剪辑按顺序组合在一起形成新的连续流: ```python final_clip = mp.concatenate_videoclips([clipA, clipB, clipC]) ``` 以上就是关于 MoviePy 版本 2.1.1 中 `Clip` 类的基础介绍及其一些典型应用场景的例子。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值