You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMD中运行Python控制台视频渲染脚本?

在CMD中运行控制台视频渲染Python项目的方法及代码修复

一、CMD运行步骤

  • 确认Python已添加到系统环境变量:打开CMD,输入python --version,能正常显示版本号则说明配置正确;若未配置,需将Python安装目录下的python.exe路径添加到系统PATH变量中。
  • 切换到项目目录:使用cd命令定位到代码文件和视频文件所在的文件夹,例如:
    cd D:\YourProjectPath
    
  • 执行代码:输入以下命令运行你的Python文件(假设文件名为console_video.py):
    python console_video.py
    
    若系统中有多个Python版本,可使用py -3 console_video.py指定Python3版本运行。
  • 注意视频路径:确保badapple.mp4与代码文件处于同一目录,或者在代码中填写视频的绝对路径(如vid = cv.VideoCapture('D:\YourProjectPath\badapple.mp4'))。

二、代码修复(解决CMD运行时的报错问题)

你的代码存在两处关键错误,会导致在CMD中运行时崩溃:

  1. 灰度转换参数错误:cv.cvtColor应使用cv.COLOR_BGR2GRAY而非cv.IMREAD_GRAYSCALE,后者是读取图片时的参数。
  2. 灰度图通道访问错误:转换为灰度图后,每个像素是单个数值而非RGB数组,原代码中j[2]会引发索引越界错误。

修复后的完整代码:

import cv2 as cv
import numpy as np
import os

# 建议使用绝对路径避免路径问题
vid = cv.VideoCapture('badapple.mp4')
input("按回车键开始...")
ret, frame = vid.read()
if not ret:
    print("无法读取视频文件,请检查路径是否正确")
    exit()

a = frame.shape[0] / 50
b = frame.shape[1] // a * 2
# 设置CMD窗口大小
os.system(f"mode con cols={int(b)} lines=50")

while True:
    cons_frame = ''
    ret, frame = vid.read()
    if not ret:
        break  # 视频播放结束退出循环

    # 调整帧大小适配控制台
    new_frame1 = cv.resize(frame, (int(frame.shape[1]//a*2), 50), interpolation=cv.INTER_AREA)
    # 转换为灰度图
    new_frame = cv.cvtColor(new_frame1, cv.COLOR_BGR2GRAY)
    
    for row in new_frame:
        for pixel in row:
            # 根据灰度值映射到不同字符
            if pixel < 25:
                cons_frame += ' '
            elif pixel < 50:
                cons_frame += '.'
            elif pixel < 75:
                cons_frame += '-'
            elif pixel < 100:
                cons_frame += ':'
            elif pixel < 125:
                cons_frame += '='
            elif pixel < 150:
                cons_frame += '+'
            elif pixel < 175:
                cons_frame += 'x'
            elif pixel < 200:
                cons_frame += '#'
            elif pixel < 225:
                cons_frame += '%'
            else:
                cons_frame += '@'
        cons_frame += '\n'  # 每行结束添加换行符,让帧正确换行显示
    
    print(cons_frame, flush=True)

    # 按'd'键退出
    if cv.waitKey(20) & 0xFF == ord('d'):
        break

vid.release()
cv.destroyAllWindows()

额外说明

  • 添加了视频读取失败的判断,避免因视频路径错误导致的崩溃。
  • 在每一行像素遍历结束后添加了换行符,确保控制台渲染的帧是正确的行列结构。
  • 使用f-string简化窗口大小设置的字符串拼接,代码更易读。

内容的提问来源于stack exchange,提问作者JeNya Bright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:18:18