最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用moviepy庫實現(xiàn)將視頻轉(zhuǎn)GIF文件

 更新時間:2026年06月01日 09:18:07   作者:py小王子  
moviepy?是一個用于視頻編輯的?Python?庫,這篇文章主要為大家詳細介紹了Python如何使用moviepy庫實現(xiàn)將視頻轉(zhuǎn)GIF文件,有需要的小伙伴可以了解下

前言

moviepy 是一個用于視頻編輯的 Python 庫,它提供了許多強大的功能,如視頻剪輯、拼接、標題添加、視頻效果應用、音頻處理等。此外,moviepy 還可以將視頻轉(zhuǎn)換為 GIF 文件,這是許多用戶喜歡使用它的一個原因。

pip install moviepy

或者

完整代碼 

import os
# 從moviepy.editor模塊中導入了VideoFileClip類,該類用于加載和處理視頻文件。
from moviepy.editor import VideoFileClip
# 加載視頻
# 使用VideoFileClip類的構(gòu)造函數(shù)加載名為movie.mp4的視頻文件,并將其存儲在videoClip變量中。
is_video = input("請輸入您的視頻路徑:")
videoClip = VideoFileClip(f"{is_video}")
# 判斷并打印視頻的原始時長
print(f"您的視頻總時長為: {videoClip.duration} S")
# 調(diào)整幀率和大小,并設置時間范圍
# 調(diào)用subclip方法,從原始視頻中裁剪出從第second1秒到第second2秒的部分。裁剪后的視頻將替換原來的videoClip對象。
second1 = input("開始截取時間:")
second2 = input("結(jié)束截取時間:")
videoClip = videoClip.subclip(second1, second2)  # 僅轉(zhuǎn)換視頻second1-second2的內(nèi)容
gif_name = input("請輸入您的GIF名字(或輸入帶后綴的名字如moviepy.gif):")
if not gif_name.lower().endswith('.gif'):
    # 檢查后綴
    # 如果用戶沒有輸入.gif,則添加.gif
    img_name = gif_name + ".gif"
# 允許用戶輸入保存目錄和文件名
save_dir = input("請輸入您想要保存GIF的目錄(例如:C:/Users/YourName/Pictures/):")
# 確保目錄末尾有斜杠(如果不是根目錄的話)
# 使用os.sep來獲取當前操作系統(tǒng)的路徑分隔符,以確保路徑在不同操作系統(tǒng)上都是正確的
# 首先檢查 save_dir 是否不以 os.sep 結(jié)尾,并且確保它不是一個空字符串。
# 如果這兩個條件都滿足,那么它就在 save_dir 的末尾添加一個路徑分隔符。
if not save_dir.endswith(os.sep) and save_dir != "":
    save_dir += os.sep
# 檢查目錄是否存在,不存在則創(chuàng)建(exist_ok=True參數(shù)允許目錄已經(jīng)存在而不引發(fā)錯誤)
os.makedirs(save_dir, exist_ok=True)
# 設置GIF的保存路徑,構(gòu)建完整的文件路徑
output_path = os.path.join(save_dir, gif_name)
# 使用resize方法將視頻的尺寸調(diào)整為原來的一半。這里的0.5表示寬度和高度都變?yōu)樵瓉淼?0%。
videoClip = videoClip.resize(0.5)
videoClip.write_gif(output_path, fps=5)  # 將幀率設置為 5 FPS

輸出: 

知識擴展

使用 Python 將視頻轉(zhuǎn)換為 GIF 文件,最常用的庫是 moviepy 或 PIL 配合 imageio。這里提供兩種主流方法:使用 moviepy(最簡單)和使用 imageio(更輕量)。同時給出優(yōu)化 GIF 文件大小的常用技巧。

方法一:使用 moviepy(推薦,功能豐富)

from moviepy.editor import VideoFileClip
# 加載視頻文件
clip = VideoFileClip("input.mp4")
# 1. 截取片段(例如從10秒到20秒)
clip = clip.subclip(10, 20)
# 2. 調(diào)整大?。蛇x,減小文件體積)
clip = clip.resize(width=320)  # 按寬度縮放,高度自動
# 3. 輸出為 GIF
clip.write_gif("output.gif", fps=10)  # fps 控制幀率,越低文件越小

參數(shù)說明

  • fps:幀率,原視頻一般 24-30 fps,轉(zhuǎn) GIF 建議 10-15,可大幅減小文件大小。
  • resize:縮小尺寸,例如 width=480。
  • subclip(start, end):截取片段,單位秒。
  • program:可指定 ffmpeg(默認)或 ImageMagick(支持更多顏色優(yōu)化)。

完整優(yōu)化示例

clip = VideoFileClip("input.mp4").subclip(5, 10)
clip = clip.resize(height=360)  # 限制高度
clip.write_gif("output.gif", fps=8, program='ffmpeg', opt='optimize')

方法二:使用 imageio + PIL(輕量級,純 Python)

import imageio
from PIL import Image
import numpy as np
# 讀取視頻
reader = imageio.get_reader("input.mp4")
fps = reader.get_meta_data()['fps']
# 準備存儲幀列表
frames = []
# 取前 5 秒,每隔 2 幀取一幀(降低幀率)
for i, frame in enumerate(reader):
    if i > fps * 5:           # 只取前5秒
        break
    if i % 2 == 0:            # 降采樣,每隔一幀取一幀
        # 可選:縮小畫面(PIL)
        img = Image.fromarray(frame)
        img = img.resize((img.width//2, img.height//2), Image.LANCZOS)
        frames.append(np.array(img))
# 保存為 GIF
imageio.mimsave("output.gif", frames, fps=fps//2)

這種方法適合不想引入額外依賴(moviepy 依賴 FFmpeg)的場景。

優(yōu)化 GIF 文件大小的小技巧

方法說明
縮短時長只轉(zhuǎn)換最精彩的幾秒,如 subclip(0, 5)
降低幀率從 30fps 降到 10-15 fps,體積明顯減小
縮小分辨率resize(width=480) 或 height=360
減少顏色數(shù)moviepy 支持 colors=64,但默認已優(yōu)化
裁剪畫面使用 clip.crop(x1,y1,x2,y2) 去除無關(guān)區(qū)域

安裝依賴

# 方法一需要
pip install moviepy
# 方法二需要
pip install imageio pillow

如果 moviepy 轉(zhuǎn)換時報錯 OSError: MoviePy Error: FFMPEG not found,需要安裝 FFmpeg:

  • Windows:下載 ffmpeg 并添加到 PATH
  • Linux:sudo apt install ffmpeg
  • Mac:brew install ffmpeg

完整腳本:批量轉(zhuǎn)換視頻為 GIF

import os
from moviepy.editor import VideoFileClip
def video_to_gif(input_path, output_path, start=0, duration=5, width=480, fps=10):
    clip = VideoFileClip(input_path).subclip(start, start+duration)
    clip = clip.resize(width=width)
    clip.write_gif(output_path, fps=fps)
    clip.close()
# 批量處理文件夾下所有 mp4
input_dir = "videos"
output_dir = "gifs"
os.makedirs(output_dir, exist_ok=True)
for file in os.listdir(input_dir):
    if file.endswith(".mp4"):
        in_path = os.path.join(input_dir, file)
        out_path = os.path.join(output_dir, file.replace(".mp4", ".gif"))
        video_to_gif(in_path, out_path, start=0, duration=5)
        print(f"已生成: {out_path}")

總結(jié)

  • 簡單快速:moviepy 一行 write_gif 搞定。
  • 精細控制:使用 imageio 自己控制幀率和縮放。
  • 體積優(yōu)化:務必降低 fps 和分辨率。

對于大多數(shù)需求,建議直接用 moviepy,代碼簡潔且功能完善。如果 GIF 文件依然過大,可以進一步降低 fps 到 8 或使用 program='ffmpeg' 參數(shù)(默認已啟用)。

以上就是Python使用moviepy庫實現(xiàn)將視頻轉(zhuǎn)GIF文件的詳細內(nèi)容,更多關(guān)于Python moviepy視頻轉(zhuǎn)GIF的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python multiprocessing多進程原理與應用示例

    Python multiprocessing多進程原理與應用示例

    這篇文章主要介紹了Python multiprocessing多進程原理與應用,結(jié)合實例形式詳細分析了基于multiprocessing包的多進程概念、原理及相關(guān)使用操作技巧,需要的朋友可以參考下
    2019-02-02
  • Python單鏈表簡單實現(xiàn)代碼

    Python單鏈表簡單實現(xiàn)代碼

    這篇文章主要介紹了Python單鏈表簡單實現(xiàn)代碼,結(jié)合實例形式分析了Python單鏈表的具體定義與功能實現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • Pytorch上下采樣函數(shù)--interpolate用法

    Pytorch上下采樣函數(shù)--interpolate用法

    這篇文章主要介紹了Pytorch上下采樣函數(shù)--interpolate用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Tensorflow 實現(xiàn)分批量讀取數(shù)據(jù)

    Tensorflow 實現(xiàn)分批量讀取數(shù)據(jù)

    今天小編就為大家分享一篇Tensorflow 實現(xiàn)分批量讀取數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 美化輸出信息的實例

    python 美化輸出信息的實例

    今天小編就為大家分享一篇python 美化輸出信息的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 深入理解Python中pywin32庫實現(xiàn)Windows自動化與系統(tǒng)交互

    深入理解Python中pywin32庫實現(xiàn)Windows自動化與系統(tǒng)交互

    pywin32是一個讓?Python?能夠直接調(diào)用?Windows?API?和?COM?對象的擴展庫,本文將帶大家從入門到精通,系統(tǒng)性地理解?pywin32?的核心功能、內(nèi)部機制、典型應用場景和高級用法
    2025-10-10
  • 基于wxPython和DeepSeek API開發(fā)的智能批處理文件生成器

    基于wxPython和DeepSeek API開發(fā)的智能批處理文件生成器

    在日常的系統(tǒng)運維和自動化任務處理中,批處理文件(.bat)一直是Windows環(huán)境下不可或缺的工具,然而,編寫批處理腳本對于非技術(shù)人員來說存在一定門檻,本文給大家介紹了如何基于wxPython和DeepSeek API開發(fā)的智能批處理文件生成器,需要的朋友可以參考下
    2026-01-01
  • python之生成多層json結(jié)構(gòu)的實現(xiàn)

    python之生成多層json結(jié)構(gòu)的實現(xiàn)

    今天小編就為大家分享一篇python之生成多層json結(jié)構(gòu)的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 基于Mediapipe+Opencv實現(xiàn)手勢檢測功能

    基于Mediapipe+Opencv實現(xiàn)手勢檢測功能

    mediaPipe,他就是一個集成好的包括人臉關(guān)鍵位點識別、身體關(guān)鍵位點識別、手部關(guān)鍵位點識別的一個包或者庫,直接調(diào)用就能夠得到它的關(guān)鍵位點信息,本文給大家介紹Mediapipe+Opencv實現(xiàn)手勢檢測功能,感興趣的朋友一起看看吧
    2022-01-01
  • Python3.6.x中內(nèi)置函數(shù)總結(jié)及講解

    Python3.6.x中內(nèi)置函數(shù)總結(jié)及講解

    今天小編就為大家分享一篇關(guān)于Python3.6.x中內(nèi)置函數(shù)總結(jié)及講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

高邑县| 松溪县| 秭归县| 松滋市| 阜康市| 台州市| 铜梁县| 镇坪县| 日喀则市| 乐昌市| 尖扎县| 历史| 福安市| 黄浦区| 满洲里市| 阳江市| 榆社县| 高清| 巴东县| 阜宁县| 绵竹市| 松阳县| 营山县| 阜城县| 汕头市| 紫云| 南汇区| 英山县| 时尚| 吉木萨尔县| 福清市| 龙岩市| 满洲里市| 两当县| 密云县| 荥阳市| 玉山县| 长寿区| 卫辉市| 大宁县| 合阳县|