.raw后缀的文件转为jpg(压缩视频流转图片)

.raw后缀的文件转为jpg(压缩视频流转图片)

1.单.raw后缀文件转为jpg

bash 复制代码
import cv2
import numpy as np
import os

# 你的文件
raw_file = "5155.raw"
out_img = "FINAL_NORMAL_IMAGE.jpg"

# 读取裸流
with open(raw_file, "rb") as f:
    raw_data = f.read()

# 写入临时 .h264 文件(工业摄像头最常见格式)
temp_h264 = "temp.h264"
with open(temp_h264, "wb") as f:
    f.write(raw_data)

# 用 OpenCV + FFMPEG 硬解码视频流
cap = cv2.VideoCapture(temp_h264)
success = False

if cap.isOpened():
    ret, frame = cap.read()
    if ret:
        cv2.imwrite(out_img, frame)
        print("✅ 成功!正常图片已保存为:FINAL_NORMAL_IMAGE.jpg")
        success = True
    cap.release()

# 如果 H264 失败,尝试 H265
if not success:
    temp_265 = "temp.h265"
    with open(temp_265, "wb") as f:
        f.write(raw_data)
    
    cap = cv2.VideoCapture(temp_265)
    if cap.isOpened():
        ret, frame = cap.read()
        if ret:
            cv2.imwrite(out_img, frame)
            print("✅ 成功!正常图片已保存为:FINAL_NORMAL_IMAGE.jpg")
        cap.release()

# 清理临时文件
try:
    os.remove("temp.h264")
    os.remove("temp.h265")
except:
    pass

if not success:
    print("\n⚠️  你的摄像头流是:标准 YUV 裸流")
    print("我马上给你写专用版本!")

2.批量.raw后缀文件转jpg

bash 复制代码
import cv2
import os

# ===================== 配置 =====================
RAW_FOLDER   = "."          # .raw 所在文件夹(. 表示当前目录)
OUTPUT_FOLDER = "raw_images" # 输出图片保存到这里
TEMP_NAME    = "_temp.h264"
# ==================================================

# 创建输出文件夹
os.makedirs(OUTPUT_FOLDER, exist_ok=True)

# 遍历所有 .raw 文件
for fname in os.listdir(RAW_FOLDER):
    if fname.lower().endswith(".raw"):
        print(f"正在处理:{fname}")
        
        raw_path  = os.path.join(RAW_FOLDER, fname)
        save_path = os.path.join(OUTPUT_FOLDER, os.path.splitext(fname)[0] + ".jpg")

        # 读取裸流 → 写入临时 H264
        with open(raw_path, "rb") as f:
            data = f.read()
        with open(TEMP_NAME, "wb") as f:
            f.write(data)

        # 解码第一帧
        cap = cv2.VideoCapture(TEMP_NAME)
        ret, frame = cap.read()
        if ret:
            cv2.imwrite(save_path, frame)
            print(f"✅ 保存成功:{save_path}")
        else:
            print(f"❌ 解码失败:{fname}")
        
        cap.release()

# 清理临时文件
if os.path.exists(TEMP_NAME):
    os.remove(TEMP_NAME)

print("\n🎉 全部批量转换完成!图片在 raw_images 文件夹里")
相关推荐
RTC实战笔记5 天前
Android 实时音视频接入教程:媒体补充增强信息(SEI)
音视频·媒体·rtc
潜创微科技6 天前
HDMI1.3 无线传输芯片方案 空旷 150 米量产级音视频方案
音视频
VidDown6 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
换个昵称都难6 天前
音频格式之WAV
音视频
AI创界者6 天前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
u152109648496 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
VidDown6 天前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频
EasyDSS6 天前
全能音视频平台/私有化音视频系统EasyDSS!直播/点播/会议/集群对讲一站式落地
音视频
Damon_X6 天前
车载音频复习
音视频
3DVisionary6 天前
告别数据中断:XTDIC-VG视频引伸计在金属疲劳测试中3个真实案例
人工智能·音视频·应用案例·xtdic-vg·视频引伸计·疲劳测试·实战复盘