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

如何写入无插值的原始灰度视频?解决视频输出模糊问题

问题描述

我有形状为(30,30)的灰度图像numpy数组,使用以下代码写入视频时:
cv2.VideoWriter(name + '.avi', cv2.VideoWriter_fourcc(*'FFV1'), fps=24, (30, 30), False)
或
skvideo.io.FFmpegWriter("test.avi", outputdict={'-vcodec': 'libx264', '-crf': '0','-preset':'veryslow'})
原本通过plt.imshow()显示的原始图像,在生成的AVI视频中用VLC打开后出现插值模糊。我希望生成的视频完全无插值效果,已知cv2.INTER_NEAREST这类resize方法不适用。请问如何将原始图像写入视频格式?VLC播放器是否会影响视频显示?

解决方案

一、确保视频写入时无信息损失

  • 检查图像数据类型:OpenCV和FFmpeg都要求输入帧为**8位无符号整数(uint8)**的单通道灰度图。如果你的numpy数组是float类型(比如0-1范围),先转换为uint8:
    import numpy as np
    # 假设img是0-1范围的float数组
    img = (img * 255).astype(np.uint8)
    
  • 强化写入参数的准确性:
    • 使用OpenCV的VideoWriter时,确认帧尺寸参数(30,30)和数组形状完全匹配(正方形尺寸无需担心宽高顺序问题)。
    • 使用skvideo.io.FFmpegWriter时,在outputdict中明确指定帧尺寸,避免自动推断出错:
      outputdict = {
          '-vcodec': 'libx264',
          '-crf': '0',
          '-preset': 'veryslow',
          '-s': '30x30'  # 强制指定帧尺寸
      }
      
    注:FFV1和-crf 0的libx264都是无损编码,只要参数匹配,写入的视频会完整保留原始像素信息。

二、VLC播放器的显示问题

你看到的模糊大概率是VLC自动缩放导致的,不是视频本身的问题:

  • 临时调整:右键视频画面→「视频」→「缩放」→选择「原始尺寸」,或按快捷键Z切换到原始大小,此时会显示无插值的原始像素。
  • 永久设置:打开VLC的「工具」→「偏好设置」→「视频」→找到「缩放」选项,设置为「原始尺寸」,以后打开小尺寸视频会默认以原始大小显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:20:23