我在我的项目中使用新的罗技相机 c920 进行对象识别。
我的相机可以支持H264编解码器并可以显示H264高清输出。
但是我如何在下面的代码中将 CODEC 类型设置为 H264,以使用 OpenCV 指令将其输出为 H264 解码流。
我使用以下逻辑捕获视频:参考:此链接
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("display", frame);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我愿意将我的代码从 mongojack 迁移到支持新的异步 mongo 驱动程序的代码。然而我发现编码/解码的新方法是通过Codecs 并且我不认为自己Codec为模型中的每个类编写 。这就是为什么我宁愿编写一个库,给定一个类创建一个Codec. 然而我不知道如何做到这一点,也不知道是否已经有人做出一些努力来实现同样的目标。有一些库可以实现我想要的吗?如果没有,实现它的最佳方法是什么。
(我知道我可能应该使用CodecProvider那里的某个地方,但我仍然不知道从哪里开始)
我正在尝试在 Linux 服务器上运行 ffmpeg(信息来自uname -a):
Linux comp32 2.6.32-279.14.1.el6.x86_64 #1 SMP Tue Nov 6 11:21:14 CST 2012 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
ffmpeg(连同所需的编码器和解码器)在系统上成功编译,但是当我尝试执行如下基本操作时:ffmpeg -v debug -i example.m4v image%d.jpg,我收到一条有点神秘的错误消息:
ffmpeg version 2.8.1 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.7.1 (GCC)
configuration: --prefix=/users/albanie/local/usr
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libswscale 3. 1.101 …Run Code Online (Sandbox Code Playgroud) 如何获取有关我在 WebRTC 中使用的编解码器的信息?以及如何将其更改为另一个。
使用默认设置,我得到的音频质量很差,就像来自扬声器一样。
我想将来自设备的未压缩帧存储为视频,但我需要知道如何选择“全帧(未压缩)”作为 VideoWriter(在 emgu aka openCV 中)的编解码器。
当我像这样传递 -1 时,我可以从下拉菜单中选择它
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", -1 , 15, videoSize, true);
Run Code Online (Sandbox Code Playgroud)
但我想自动选择全帧(未压缩)编解码器。例如,我知道我可以通过以下方式选择 Lagarith Lossless Video Codec
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", Emgu.CV.VideoWriter.Fourcc('L','A','G','S') , 15, videoSize, true);
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚我需要使用哪个fourcc。
也许有人可以帮助我
有没有一种方法可以成功地将任何剪辑拼接在一起,以防止出现奇怪的故障?我把.mp4较小的.mp4文件放在一起,最后得到了一个带有奇怪故障的视频。我通过 Sublime Text 3 在 Windows 10 上运行 Python 3.6.1。我使用 MoviePy 进行连接。
编码:
from moviepy.editor import VideoFileClip, concatenate_videoclips
import os.path
path = "C:/Users/blah/videos/out/"
cliparray = []
for filename in os.listdir(path):
cliparray.append(VideoFileClip(path + filename))
final_clip = concatenate_videoclips(cliparray)
final_clip.write_videofile(path + "concatenatedvideo.mp4", codec = "libx264")
Run Code Online (Sandbox Code Playgroud)
奇怪的故障:
以下错误消息:
device = XMLConverter(rsrcmgr, retstr, laparams=laparams, codec=codec)
TypeError: __init__() got an unexpected keyword argument 'codec'
Run Code Online (Sandbox Code Playgroud)
原始代码:
rsrcmgr = PDFResourceManager()
retstr = BytesIO()
codec = 'utf-8'
laparams = LAParams()
device = XMLConverter(rsrcmgr, retstr, laparams=laparams, codec=codec)
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,这在我的项目设置(python 3.5.3)中运行良好,但在新设置(python 3.7.4)中则不然。不确定这是否是一个问题,或者现在是否有新版本的 XMLConverter 可用
伙计们,
我想知道是否有人可以向我解释视频解码的输出究竟是什么.假设它是MP4容器中的H.264流.
通过在屏幕上显示内容,我猜解码器可以提供两种不同类型的输出:
还有时间戳问题.
您能否请教我或指出解码器生成的内容以及视频客户端如何使用此信息在屏幕上显示内容的正确链接?
我打算下载VideoLAN源并检查它,但一些解释会有所帮助.
预先感谢您的帮助.
问候,彼得
我刚刚从http://jpegclub.org/jpegtran/下载了最新的win32 jpegtran.exe并观察了以下内容:
我准备了一个24 BPP jpeg测试图像,14500 x 10000像素.
在无损旋转期间监视jpegtran.exe命令行工具的内存消耗(180)我可以看到消耗高达900 MB内存的进程!
我会假设这样的jpeg无损转换不需要将图像文件解码到内存中,而只是对编码文件本身执行一些数学转换 - 保持内存占用非常低.
那以下哪项是真的?
编辑:
根据JasonD的回答,原因似乎是后者.所以我会延伸我的问题:
是否有任何实现可以在小块中执行这些操作(以避免高内存使用)?还是总是需要在整体上完成而且没有办法绕过它?
PS:
我不打算实现自己的编解码器/算法.相反,我问是否有任何实现符合我的要求.或者至少在理论上是否存在.
我的问题是我想用AVVideoCodecHEVC.我知道它仅适用于iOS 11,但没有A10芯片的设备不支持它.
因此,如果使用像iPhone 6这样没有A10芯片的设备,则使用
if #available(iOS 11.0, *) { let self.codec = AVVideoCodecHEVC }
Will throw Cannot Encode错误.有没有人能够弄清楚运行iOS 11的设备是否可以支持HEVC?