调整影片速度、倒转影片
这篇文章会介绍使用 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.video.fx.all 的特效模组,使用 moviepy 读取影片后,使用 speedx 方法,就能调整影片的播放速度 ( 更多特效方法参考:moviepy.video.fx (vfx) ),speedx 有下列三个参数:
| 参数 | 说明 |
|---|---|
| clip | 要套用效果的影片。 |
| factor | 影片的速度 ( 乘以几倍 ),和 final_duration 择一使用。 |
| final_duration | 转换后影片的秒数,和 factor 择一使用。 |
下方的程序码执行后,会产生一个 2 倍速的影片 ( 速度变快 ),一个 0.5 倍速的影片 ( 速度变慢 ) 和一个变成只有 2 秒长的影片 ( 如果原本影片长度大于 2 秒就会变快,小于 2 秒就会变慢 )。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
from moviepy.video.fx.all import *
video = VideoFileClip("oxxostudio.mp4") # 讀取影片
output_1 = speedx(video, factor=2) # 2 倍速
output_2 = speedx(video, factor=0.5) # 0.5 倍速
output_3 = speedx(video, final_duration=2) # 將影片變成 2 秒長
output_1.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_2.write_videofile("output_2.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_3.write_videofile("output_3.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
倒转影片
加载 moviepy.video.fx.all 的特效模组,使用 moviepy 读取影片后,使用 time_mirror 方法可以倒转影片,使用 time_symmetrize 方法可以让影片播到底之后倒转播放回头,长度会变成两倍长 ( 更多特效方法参考:moviepy.video.fx (vfx) ),下方的程序码执行后,会产生两段会倒转播放的影片:
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用
from moviepy.editor import *
from moviepy.video.fx.all import *
video = VideoFileClip("oxxostudio.mp4") # 讀取影片
output_1 = time_mirror(video) # 反轉影片
output_2 = time_symmetrize(video) # 播到底後反轉影片回頭
output_1.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_2.write_videofile("output_2.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')
微信扫码关注
抖音扫码关注