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

Python實現(xiàn)視頻轉圖片的兩種方案

 更新時間:2026年02月28日 09:15:00   作者:liwulin0506  
文章介紹了兩種Python視頻轉圖片的方案,方案1按幀提取,方案2按時間間隔提取,核心功能包括關鍵函數(shù)與參數(shù)的說明、實用優(yōu)化點和使用注意事項,標注工具推薦包括LabelImg、LabelMe和CVAT,需要的朋友可以參考下

一、前期準備:安裝依賴庫

核心使用 opencv-python(OpenCV)庫處理視頻和圖像,這是Python視覺處理的主流庫,先通過pip安裝:

二、方案1:基礎版 - 按幀提?。ㄌ崛∷袔?每隔N幀提取)

適合大多數(shù)標注場景,可靈活設置提取間隔,避免圖片過多冗余。

完整代碼

import cv2
import os

def video_to_images_basic(
    video_path,          # 輸入視頻文件路徑(如:test.mp4)
    output_dir,          # 輸出圖片文件夾路徑
    frame_interval=30,   # 提取間隔:每30幀提取1張(默認30幀,對應1秒/幀,可調整)
    img_format="jpg",    # 輸出圖片格式(jpg/png,推薦jpg,占用空間?。?
    img_prefix="frame"   # 圖片文件名前綴(如:frame_0001.jpg)
):
    # 1. 創(chuàng)建輸出文件夾(若不存在則自動創(chuàng)建)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"創(chuàng)建輸出文件夾:{output_dir}")

    # 2. 打開視頻文件
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        raise ValueError(f"無法打開視頻文件:{video_path}")

    # 3. 獲取視頻基本信息
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # 視頻總幀數(shù)
    fps = cap.get(cv2.CAP_PROP_FPS)                        # 視頻幀率(每秒幀數(shù))
    print(f"視頻信息:總幀數(shù)={total_frames},幀率={fps:.2f},預計提取圖片數(shù)={total_frames//frame_interval + 1}")

    # 4. 循環(huán)提取幀并保存
    frame_count = 0  # 當前幀計數(shù)器
    saved_count = 0  # 已保存圖片計數(shù)器

    while True:
        # 讀取一幀視頻
        ret, frame = cap.read()

        # 若讀取失?。ㄒ训揭曨l末尾),退出循環(huán)
        if not ret:
            break

        # 按間隔提取幀
        if frame_count % frame_interval == 0:
            # 構造圖片文件名(補零對齊,方便排序)
            img_name = f"{img_prefix}_{saved_count:04d}.{img_format}"
            img_path = os.path.join(output_dir, img_name)

            # 保存圖片
            cv2.imwrite(img_path, frame)
            print(f"已保存:{img_path}")

            saved_count += 1

        frame_count += 1

    # 5. 釋放資源
    cap.release()
    print(f"\n轉換完成!共保存 {saved_count} 張圖片,存儲路徑:{output_dir}")

# ------------------- 調用示例 -------------------
if __name__ == "__main__":
    # 配置參數(shù)
    VIDEO_PATH = "input_video.mp4"  # 你的視頻文件路徑
    OUTPUT_DIR = "extracted_images" # 圖片輸出文件夾
    FRAME_INTERVAL = 30             # 每30幀提取1張(1秒1張,若視頻幀率25,則每1.2秒1張)

    # 執(zhí)行轉換
    video_to_images_basic(
        video_path=VIDEO_PATH,
        output_dir=OUTPUT_DIR,
        frame_interval=FRAME_INTERVAL,
        img_format="jpg"
    )

三、方案2:進階版 - 按時間間隔提取(更精準可控)

適合需要按固定時間間隔(如每2秒提取1張)的場景,比按幀間隔更直觀,不受視頻幀率影響。

完整代碼

import cv2
import os

def video_to_images_by_time(
    video_path,          # 輸入視頻文件路徑
    output_dir,          # 輸出圖片文件夾路徑
    time_interval=1.0,   # 時間間隔:每1.0秒提取1張(可調整,如2.0=每2秒1張)
    img_format="jpg",    # 輸出圖片格式
    img_prefix="frame"   # 圖片文件名前綴
):
    # 1. 創(chuàng)建輸出文件夾
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"創(chuàng)建輸出文件夾:{output_dir}")

    # 2. 打開視頻文件
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        raise ValueError(f"無法打開視頻文件:{video_path}")

    # 3. 獲取視頻基本信息
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    video_duration = total_frames / fps  # 視頻總時長(秒)
    frame_interval = int(fps * time_interval)  # 換算為幀間隔

    print(f"視頻信息:總幀數(shù)={total_frames},幀率={fps:.2f},總時長={video_duration:.2f}秒")
    print(f"時間間隔={time_interval}秒,對應幀間隔={frame_interval}幀,預計提取圖片數(shù)={int(video_duration//time_interval) + 1}")

    # 4. 循環(huán)提取幀并保存
    frame_count = 0
    saved_count = 0
    last_saved_time = 0.0  # 上一次保存圖片的時間

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        # 獲取當前幀對應的時間(秒)
        current_time = frame_count / fps

        # 按時間間隔保存
        if current_time - last_saved_time >= time_interval:
            img_name = f"{img_prefix}_{saved_count:04d}.{img_format}"
            img_path = os.path.join(output_dir, img_name)
            cv2.imwrite(img_path, frame)
            print(f"時間{current_time:.2f}秒:已保存 {img_path}")

            saved_count += 1
            last_saved_time = current_time

        frame_count += 1

    # 5. 釋放資源
    cap.release()
    print(f"\n轉換完成!共保存 {saved_count} 張圖片,存儲路徑:{output_dir}")

# ------------------- 調用示例 -------------------
if __name__ == "__main__":
    VIDEO_PATH = "input_video.mp4"
    OUTPUT_DIR = "extracted_images_by_time"
    TIME_INTERVAL = 2.0  # 每2秒提取1張圖片

    video_to_images_by_time(
        video_path=VIDEO_PATH,
        output_dir=OUTPUT_DIR,
        time_interval=TIME_INTERVAL,
        img_format="jpg"
    )

四、核心功能說明

1. 關鍵函數(shù)與參數(shù)

  • cv2.VideoCapture(video_path):打開視頻文件,返回視頻捕獲對象;
  • cap.read():讀取一幀視頻,返回(ret, frame),ret為布爾值(是否讀取成功),frame為當前幀圖像(numpy數(shù)組);
  • cap.get(cv2.CAP_PROP_FRAME_COUNT):獲取視頻總幀數(shù);
  • cap.get(cv2.CAP_PROP_FPS):獲取視頻幀率(每秒播放的幀數(shù));
  • cv2.imwrite(img_path, frame):將幀圖像保存為圖片文件;
  • 核心參數(shù)調整:
    • frame_interval(方案1):幀間隔,數(shù)值越大提取圖片越少,推薦30(對應1秒1張);
    • time_interval(方案2):時間間隔,按需設置(如0.5=每0.5秒1張,5.0=每5秒1張)。

2. 實用優(yōu)化點

  • 文件夾自動創(chuàng)建:無需手動創(chuàng)建輸出文件夾,代碼會自動判斷并創(chuàng)建;
  • 文件名補零對齊:圖片名格式為frame_0001.jpg,方便后續(xù)標注軟件按順序加載;
  • 格式靈活選擇:支持jpg(占用空間?。┖?code>png(無損壓縮,適合高精度標注);
  • 進度打印:實時打印保存路徑,方便查看轉換進度;
  • 資源釋放:使用cap.release()釋放視頻資源,避免內存泄漏。

五、使用注意事項

  1. 視頻路徑問題
    • 若使用相對路徑,需將視頻文件放在Python腳本同一目錄下;
    • 絕對路徑示例(Windows):"D:/videos/test.mp4",(Linux/Mac):"/home/user/videos/test.mp4";
  2. 圖片冗余控制
    • 標注時無需提取所有幀,建議按1~3秒間隔提取,避免圖片過多增加標注工作量;
    • 若視頻畫面變化緩慢(如監(jiān)控視頻),可增大間隔(如5~10秒);
  3. 編碼問題處理
    • 若出現(xiàn)“無法打開視頻”或“保存圖片失敗”,大概率是視頻編碼不兼容,可先用FFmpeg轉換為MP4格式(ffmpeg -i input.avi -c:v libx264 output.mp4);
  4. 內存占用
    • 處理超長視頻時,無需擔心內存溢出,代碼逐幀讀取并保存,不會緩存全部幀。

六、標注工具推薦

轉換后的圖片可使用以下主流標注工具進行標注:

  1. LabelImg:輕量級圖形化標注工具,支持VOC/YOLO格式,適合目標檢測標注;
  2. LabelMe:支持多邊形、關鍵點等復雜標注,適合語義分割、實例分割標注;
  3. CVAT:工業(yè)級標注平臺,支持批量標注、多人協(xié)作,適合大規(guī)模數(shù)據(jù)集標注。

以上就是Python實現(xiàn)視頻轉圖片的兩種方案的詳細內容,更多關于Python視頻轉圖片的資料請關注腳本之家其它相關文章!

相關文章

  • python解析中國天氣網(wǎng)的天氣數(shù)據(jù)

    python解析中國天氣網(wǎng)的天氣數(shù)據(jù)

    最近學習python 感覺這門腳本語言十分靈活 而且功能十分強大 尤其是他re庫用于正則匹配十分強大,寫了個例子解析中國天氣網(wǎng)
    2014-03-03
  • Python文件操作中進行字符串替換的方法(保存到新文件/當前文件)

    Python文件操作中進行字符串替換的方法(保存到新文件/當前文件)

    這篇文章主要介紹了Python文件操作中進行字符串替換的方法(保存到新文件/當前文件) ,本文給大家介紹兩種方法,每種方法給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • Windows下多版本Python共享Poetry測試安裝

    Windows下多版本Python共享Poetry測試安裝

    這篇文章主要為大家介紹了Windows下多版本Python共享Poetry的測試安裝配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Python實現(xiàn)的基數(shù)排序算法原理與用法實例分析

    Python實現(xiàn)的基數(shù)排序算法原理與用法實例分析

    這篇文章主要介紹了Python實現(xiàn)的基數(shù)排序算法,簡單說明了基數(shù)排序的原理并結合實例形式分析了Python實現(xiàn)與使用基數(shù)排序的具體操作技巧,需要的朋友可以參考下
    2017-11-11
  • python中argparse模塊用法詳解(小白入門)

    python中argparse模塊用法詳解(小白入門)

    argparse是Python標準庫中用于解析命令行參數(shù)的模塊,提供了一種簡單而靈活的方式來處理命令行輸入,并幫助用戶構建具有參數(shù)選項和幫助信息的命令行界面,這篇文章主要介紹了python中argparse模塊用法的相關資料,需要的朋友可以參考下
    2026-01-01
  • python機器學習高數(shù)篇之泰勒公式

    python機器學習高數(shù)篇之泰勒公式

    這篇文章主要介紹了python機器學習高數(shù)篇之函數(shù)極限和導數(shù),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • PyQt5事件處理之定時在控件上顯示信息的代碼

    PyQt5事件處理之定時在控件上顯示信息的代碼

    這篇文章主要介紹了PyQt5事件處理之定時在控件上顯示信息的代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python實用技巧之利用元組代替字典并為元組元素命名

    Python實用技巧之利用元組代替字典并為元組元素命名

    這篇文章主要給大家介紹了關于Python實用技巧之利用元組代替字典并為元組元素命名的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-07-07
  • Python批量寫入數(shù)據(jù)到PostgreSQL三種主流方案對比詳解

    Python批量寫入數(shù)據(jù)到PostgreSQL三種主流方案對比詳解

    本文對比了Python結合PostgreSQL三種主流方案(executemany()、COPY命令、pandas.to_sql())在百萬級和千萬級數(shù)據(jù)寫入場景下的性能,并提出了優(yōu)化建議,包括預處理語句、多線程并行寫入等,需要的朋友可以參考下
    2026-01-01
  • Python繪制全球疫情變化地圖的實例代碼

    Python繪制全球疫情變化地圖的實例代碼

    這篇文章主要介紹了使用Python繪制全球疫情變化地圖的實例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論

株洲市| 新竹市| 化隆| 保定市| 洛川县| 昭觉县| 左权县| 成武县| 丽水市| 桐梓县| 建水县| 临安市| 阳朔县| 田林县| 南陵县| 永胜县| 磐石市| 彰武县| 平罗县| 偏关县| 图片| 资兴市| 宜阳县| 祁阳县| 双牌县| 阿鲁科尔沁旗| 奎屯市| 木兰县| 正安县| 庐江县| 卢龙县| 老河口市| 惠东县| 南汇区| 潞西市| 麻城市| 胶州市| 罗江县| 读书| 西昌市| 迭部县|