FFMPEG视频转图片

用FFMPEG视频转图片,并且for循环

复制代码
import os
import subprocess

# 输入文件夹和输出文件夹路径
input_folder = r"I:\xxx"
output_base_folder = r"D:\xxx\YOLO\data\video"
output_subfolder_name = "20240609"

# 创建输出子文件夹
output_folder = os.path.join(output_base_folder, output_subfolder_name)
os.makedirs(output_folder, exist_ok=True)

# 循环处理输入文件夹中的所有视频文件
for file_name in os.listdir(input_folder):
    # 检查是否是视频文件(扩展名可根据需要增加)
    if file_name.lower().endswith(('.mp4', '.mov', '.avi', '.mkv')):
        input_path = os.path.join(input_folder, file_name)
        output_name = os.path.splitext(file_name)[0]  # 去掉扩展名
        output_path_pattern = os.path.join(output_folder, f"{output_name}_frame_%04d.jpg")

        # 构建 FFmpeg 命令
        ffmpeg_command = [
            "ffmpeg",
            "-i", input_path,            # 输入视频路径
            "-vf", "fps=5",              # 每秒提取 5 帧
            "-q:v", "2",                 # 高质量图片
            output_path_pattern          # 输出图片路径模式
        ]

        # 打印当前正在处理的文件
        print(f"Processing video: {input_path} -> {output_folder}")
        
        # 执行 FFmpeg 命令
        subprocess.run(ffmpeg_command, check=True)

print("视频处理完成!图片已保存到:", output_folder)

改进以后的代码

python 复制代码
import os
import subprocess

# 输入文件夹和输出文件夹路径
input_folder = r"H:\\xxxx"
output_base_folder = r"D:\\xxx"
output_subfolder_name = os.path.split(os.path.dirname(input_folder))[1]

# 创建输出子文件夹
output_folder = os.path.join(output_base_folder, output_subfolder_name)
os.makedirs(output_folder, exist_ok=True)

# 记录成功和失败的文件
processed_videos = []
skipped_videos = []

# 循环处理输入文件夹中的所有视频文件
for file_name in os.listdir(input_folder):
    # 检查是否是视频文件(扩展名可根据需要增加)
    if file_name.lower().endswith(('.mp4')):
        input_path = os.path.join(input_folder, file_name)
        output_name = os.path.splitext(file_name)[0]  # 去掉扩展名
        output_path_pattern = os.path.join(output_folder, f"{output_name}_frame_%04d.jpg")

        # 构建 FFmpeg 命令
        ffmpeg_command = [
            "ffmpeg",
            "-i", input_path,            # 输入视频路径
            "-vf", "fps=1",              # 每秒提取 1 帧
            "-q:v", "2",                 # 高质量图片
            output_path_pattern          # 输出图片路径模式
        ]

        try:
            print(f"Processing video: {input_path} -> {output_folder}")
            subprocess.run(ffmpeg_command, check=True)
            processed_videos.append(file_name)
        except subprocess.CalledProcessError as e:
            print(f"Error processing {input_path}: {e}")
            skipped_videos.append(file_name)

# 保存处理结果到文件
with open(os.path.join(output_folder, "processed_videos.txt"), "w") as processed_file:
    processed_file.write("\n".join(processed_videos))

with open(os.path.join(output_folder, "skipped_videos.txt"), "w") as skipped_file:
    skipped_file.write("\n".join(skipped_videos))

print("处理完成!")
print(f"成功处理的视频列表已保存到: {os.path.join(output_folder, 'processed_videos.txt')}")
print(f"跳过的视频列表已保存到: {os.path.join(output_folder, 'skipped_videos.txt')}")
相关推荐
VidDown3 小时前
从视频画面里提取文字:OCR、文字检测与结构化输出
python·网络协议·ocr·音视频·视频编解码·视频
音视频牛哥4 小时前
一帧视频的底层工程:像素格式、内存带宽、GPU 与 AI
音视频·像素格式·yuv rgb·nv12 nv21·rgb565·rtsp yuv·rtmp rgb
VidDown5 小时前
文件没问题但网页播不了:播放器接入实战与那些“环境问题
python·网络协议·音视频·视频编解码·视频
the3clipse6 小时前
视频编码技术如何赋能游戏性能优化:从硬件隔离到AI驱动的带宽革命
游戏·性能优化·音视频·视频编码·硬件加速·ai编码·自适应编码
I Am a robert girl6 小时前
打破音频生态壁垒:用 WinAirCast 把 Windows 声音塞进 HomePod
windows·音视频·跨平台开发·音频串流·airplay 2·homepod
揽秀亭长6 小时前
视频转脚本有哪些技术路线?三种常见方案对比分析
人工智能·音视频
VidDown6 小时前
从一堆脚本到能维护的系统:视频处理管道的工程化
服务器·ffmpeg·音视频·视频编解码
轻口味7 小时前
HarmonyOS 7 新特性2:音频编创——轻音台里的降噪、环绕与格式转换
华为·音视频·harmonyos·鸿蒙·音频编创
技灵AI7 小时前
Seedance 长剧生产实战:用首尾帧接戏解决角色崩脸与场景漂移(含 return_last_frame 用法与提示词模板)
人工智能·prompt·aigc·音视频
2601_962381139 小时前
做城市历史视频时,AI 自动生成变迁动效的实现路径拆解
人工智能·音视频