影片剪辑与合并
这篇文章会介绍使用 Python 的 moviepy 第三方函数库,进行影片的剪辑 ( 剪辑出指定秒数的影片 ),以及将多段影片合并为一支影片。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
安装 moviepy
输入下列指令安装 moviepy,根据个人环境使用 pip 或 pip3。
!pip install moviepy
由于影片转档会使用 ffmpeg,因此也要安装 ffmpeg ( 影片存档常见错误“TypeError: must be real number, not NoneType”往往都是 ffmpeg 没有安装导致 ),根据个人环境使用 pip 或 pip3,Anaconda Jupyter 可以使用 conda install。
!pip install ffmpeg
剪辑影片
加载 moviepy 函数库后,使用 subclip 方法,参数填入起始秒数以及结束秒数,就可以剪辑影片,剪辑后再透过 write_videofile 方法输出。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4") # 讀取影片
output = video.subclip(12,15) # 剪輯影片 ( 單位秒 )
output.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
# 輸出影片,注意後方需要加上參數,不然會沒有聲音
print('ok')
合并影片
如果有多段影片,可使用 concatenate_videoclips 的方法,将多段影片拼接在一起。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
o1 = VideoFileClip("oxxo1.mp4") # 開啟第一段影片
o2 = VideoFileClip("oxxo2.mp4") # 開啟第二段影片
o3 = VideoFileClip("oxxo3.mp4") # 開啟第三段影片
output = concatenate_videoclips([o1, o2, o3]) # 合併影片
output.write_videofile("output123.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
如果合并的影片,出现播不出来的状况 ( 画面是乱码 ),表示合并了不同尺寸的影片所导致。
解决方法有两种,第一种使用 resize 将尺寸调整为一致,合并后图像就不会出现乱码。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
o1 = VideoFileClip("oxxo1.mp4")
o1 = o1.resize((1280,720)) # 改變尺寸
o2 = VideoFileClip("oxxo2.mp4")
o3 = VideoFileClip("oxxo3.mp4")
output = concatenate_videoclips([o1, o2, o3])
output.write_videofile("output456.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
第二种方法可以设定 concatenate_videoclips 的参数 method 为 compose ( 默认为 chain,表示都要同样大小 ),表示采用原始影片大小进行合并,最终输出大小会采用最大的影片为主。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
o1 = VideoFileClip("oxxo1.mp4")
o2 = VideoFileClip("oxxo2.mp4")
o3 = VideoFileClip("oxxo3.mp4")
output = concatenate_videoclips([o1, o2, o3], method='compose') # 設定 method 為 compose
output.write_videofile("output456.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
微信扫码关注
抖音扫码关注