首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Python 遍歷文件夾讀取圖片製作動畫:os.walk + imageio 完整示例

     編輯:程式設計綜合問答

需求

Python 訪問桌面文件夾下的圖片序列,生成動畫 (GIF/MP4)。

核心庫

  • os/pathlib:遍歷文件夾。
  • imageio / PIL (Pillow) / cv2:讀寫圖片、生成動畫。

完整代碼

import os
import imageio.v2 as imageio  # pip install imageio
from pathlib import Path

def make_animation(folder_path, output_gif, fps=10):
    # 1. 獲取所有圖片文件 (按文件名排序保證幀序)
    valid_ext = {'.png', '.jpg', '.jpeg', '.bmp', '.tiff'}
    files = sorted(
        [f for f in Path(folder_path).iterdir() if f.suffix.lower() in valid_ext],
        key=lambda p: p.stem  # 或按修改時間 p.stat().st_mtime
    )
    if not files:
        print("未找到圖片")
        return

    # 2. 讀取幀
    frames = []
    for f in files:
        try:
            frames.append(imageio.imread(str(f)))
        except Exception as e:
            print(f"跳過 {f}: {e}")

    # 3. 寫入 GIF
    imageio.mimsave(output_gif, frames, fps=fps)
    print(f"生成完成: {output_gif}, 共 {len(frames)} 幀")

if __name__ == '__main__':
    # 桌面路徑 (Windows)
    desktop = Path.home() / "Desktop" / "my_frames"
    make_animation(desktop, "animation.gif", fps=12)

    # 進階: 生成 MP4 (需安裝 ffmpeg: pip install imageio-ffmpeg)
    # imageio.mimsave("animation.mp4", frames, fps=12, codec='libx264')

關鍵點

流式寫入版 (大量幀)

with imageio.get_writer('animation.gif', mode='I', fps=12) as writer:
    for f in files:
        writer.append_data(imageio.imread(str(f)))

常見問題

  • ModuleNotFoundError:pip install imageio (GIF) / pip install imageio[ffmpeg] (MP4)。
  • 權限錯誤:確保腳本對文件夾有讀權限。
  • 幀序錯亂:文件名需可排序 (如 001,002... 或時間戳)。

三行核心代碼:files = sorted(Path(folder).glob('*.png')) → frames = [imread(f) for f in files] → mimsave(out, frames, fps=10),即可完成圖片序列轉動畫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
環節代碼說明
跨平台桌面路徑Path.home() / "Desktop"Windows/Mac/Linux 通用
排序保證幀序sorted(..., key=lambda p: p.stem)文件名建議 frame_001.png 格式
異常容錯try/except 跳過損壞圖片避免單張壞圖導致全失敗
內存優化大量幀用 imageio.get_writer 流式寫入避免全量載入內存