当前位置: 首页 > 知识库问答 >
问题:

opencv-Videowriter控制比特率

米嘉禧
2023-03-14

我有一个使用opencv视频编写器的python脚本

来源https://gist.github.com/stanchiang/b4e4890160a054a9c1d65f9152172600

如果我接受一个文件,无论我是否简单地将视频帧传递给作者(有效地复制文件),或者如果我试图编辑帧,文件总是更大。我希望它不比原来的大(因为如果你读了我的剧本,我会模糊很多东西)。

在检查他们的元数据后,使用ff探针-v安静-print_formatjson-show_format-show_streams输入File.mp4我注意到新文件的比特率比以前高5.5倍以上。

来源https://www.diffchecker.com/8r2syeln

由于比特率是文件大小的一个重要决定因素,我想知道

  1. 我可以通过视频写入器对新文件的所需比特率进行硬编码
  2. 是否由于某种原因需要大量增加的比特率

共有1个答案

艾照
2023-03-14

基本上这个答案https://stackoverflow.com/a/13298538/1079379

# import packages
from PIL import Image
from subprocess import Popen, PIPE
from imutils.video import VideoStream
from imutils.object_detection import non_max_suppression
from imutils import paths
import cv2
import numpy as np
import imutils

# ffmpeg setup
p = Popen(['ffmpeg', '-y', '-f', 'image2pipe', '-vcodec', 'mjpeg', '-r', '24', '-i', '-', '-vcodec', 'h264', '-qscale', '5', '-r', '24', 'video.mp4'], stdin=PIPE)

video = cv2.VideoCapture('videos.mp4')

while True:
    ret, frame = video.read()
    if ret:
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        im = Image.fromarray(frame)
        im.save(p.stdin, 'JPEG')
    else:
        break

p.stdin.close()
p.wait()
video.release()
cv2.destroyAllWindows()
 类似资料:
  • 问题内容: 我正在尝试从OSX下的OpenCV的python包装器创建视频。我正在使用python 2.7.1,opencv 2.3.1a和该版本的opencv附带的willowgarage的python包装器。我有: OpenCV说 我不确定下一步该怎么做 问题答案: 关于此主题的在线指南有很多过时且不正确-我想我几乎都尝试过。在Mac OSX上查看VideoWriter的基于QTKit的源实现

  • 我有一个BaseController,如下所示。 我在我的控制器中继承了这个基本控制器,如下所示。 可见,我在BaseController和TestController上都有OnActionExecutingContext(ActionExecutingContext filterContext)。实际上,我这样做的原因是我在基本控制器中管理许多从这个继承的每个控制器中需要的东西。 但现在我需要在

  • 本文向大家介绍Opencv实现视频播放与进度控制,包括了Opencv实现视频播放与进度控制的使用技巧和注意事项,需要的朋友参考一下 视频画面本质上是由一帧一帧的连续图像组成的,播放视频其实就是在播放窗口把一系列连续图像按一定的时间间隔一幅幅贴上去实现的。 人眼在连续图像的刷新最少达到每秒24帧的时候,就分辨不出来图像间的闪动了,使人感觉呈现出来的是连续的画面,视频的播放就是利用了这一点。我们知道,

  • 问题内容: 我有一个JPanel,我想保留一个正方形,但是我希望它具有一定的大小,以便它填充其父JFrame中可能的最大空间,但仍保持正方形,即它将JFrame的最短边作为正方形宽度。 我已经搜索了整个网络,检查了所有的布局管理器,似乎没有一个简单的解决方案可以解决这个非常简单的问题。 问题答案: 您可以使用和, 例如:(启发自:https : //community.oracle.com/thr

  • 我想用in参数制作一个过程。更具体地说,我有如下表1 对于相同的COL1和col2/col3,请检查从col4中选择不同的值,例如COL1=600、col2=140/col3=2和col2=140/col3=3返回20和35 并在表1中插入第600、140、3、20、1200、7行(序号)600、140、3、35、1700、8行(序号) 但我不知道如何执行insert语句:( 你能帮我做吗?非常感

  • 比特币是人类历史上第一种数字货币。 什么是数字货币?一句话概括,数字货币是基于数学加密原理构建的不可伪造的货币系统,而比特币是第一个基于数学加密原理构建的分布式数字货币系统。 比特币和区块链有什么关系?一句话概括,比特币使用区块链技术实现了数字货币的可信支付。 比特币的历史可以追溯到2008年10月,一个名叫中本聪的神秘人物在一个密码学朋克论坛上发表了一篇比特币:一种点对点的电子现金系统的文章,这