我想知道HTML5 <video>
标签现在是否支持播放.avi格式的视频文件.
我基本上有一个字节矩阵.每行(意为byte [])表示图像.如何创建一个电影(任何格式 - avi,mpeg,等等),并将其保存为文件?每个图像可以是以下之一:
int JPEG Encoded formats.
int NV16 YCbCr format, used for video.
int NV21 YCrCb format used for images, which uses the NV21 encoding format.
int RGB_565 RGB format used for pictures encoded as RGB_565.
int YUY2 YCbCr format used for images, which uses YUYV (YUY2) encoding format.
int YV12 Android YUV format: This format is exposed to software decoders and applications.
Run Code Online (Sandbox Code Playgroud)
只要我创建电影,我就可以选择我喜欢的格式.
public void createMovie(byte[][] images) {
// and ideas on what to write here?
} …
Run Code Online (Sandbox Code Playgroud) 有一个IP网络摄像头我以前写了一个.NET类.它基本上是一个Timer实现,每隔五秒从摄像头ping一次快照CGI脚本.相机本身非常难以捉摸; 它没有任何类型的API供我使用,我唯一能以编程方式(远程)调用此脚本.该脚本返回640x480 JPEG图像.简单.
现在我需要做的就是花几天的时间来拍摄这些图像,然后创建一个"时间流逝"的AVI视频流,最终将其嵌入到网页中.我怎么能用VB.NET做到这一点?
在网上有例子和学习OpenCv,Orielly中给出的代码.
经过多次尝试后,out.avi文件写入0字节.我想知道我哪里出错了.
以下是我用过的代码......
int main(int argc, char* argv[]) {
CvCapture* input = cvCaptureFromFile(argv[1]);
IplImage* image = cvRetrieveFrame(input);
if (!image) {
printf("Unable to read input");
return 0;
}
CvSize imgSize;
imgSize.width = image->width;
imgSize.height = image->height;
double fps = cvGetCaptureProperty(
input,
CV_CAP_PROP_FPS
);
CvVideoWriter *writer = cvCreateVideoWriter(
"out.avi",
CV_FOURCC('M', 'J', 'P', 'G'),
fps,
imgSize
);
IplImage* colourImage;
//Keep processing frames...
for (;;) {
//Get a frame from the input video.
colourImage = cvQueryFrame(input);
cvWriteFrame(writer, colourImage);
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&input);
}
Run Code Online (Sandbox Code Playgroud) 我试图从我的相机获取fps,以便我可以将其传递给VideoWriter
输出视频.但是,我通过VideoCapture::get(CV_CAP_PROP_FPS)
相机调用获得0 fps .如果我硬编码,我的视频可能太慢或太快.
#include "opencv2/opencv.hpp"
#include <stdio.h>
#include <stdlib.h>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
cv::VideoCapture cap;
int key = 0;
if(argc > 1){
cap.open(string(argv[1]));
}
else
{
cap.open(CV_CAP_ANY);
}
if(!cap.isOpened())
{
printf("Error: could not load a camera or video.\n");
}
Mat frame;
cap >> frame;
waitKey(5);
namedWindow("video", 1);
double fps = cap.get(CV_CAP_PROP_FPS);
CvSize size = cvSize((int)cap.get(CV_CAP_PROP_FRAME_WIDTH),(int)cap.get(CV_CAP_PROP_FRAME_HEIGHT));
int codec = CV_FOURCC('M', 'J', 'P', 'G');
if(!codec){ waitKey(0); return 0; }
std::cout …
Run Code Online (Sandbox Code Playgroud) 我必须使用包含在各个目录中的大量 jpeg 图像创建低分辨率 AVI 视频。我有将近一百个目录,每个目录可能包含数千个图像。
为了自动化这个过程,我使用 OpenCV 编写了一个 python 脚本来创建一个视频对象,从给定目录加载每个图像,并将每个图像写入该目录的特定视频文件。所有这些都很好用。我的问题是如何控制视频对象的压缩质量。
VideoWriter 模块接受 5 个参数。第二个参数“fourcc”设置压缩代码。
cv2.VideoWriter.open(文件名,fourcc,fps,frameSize[,isColor])
我们可以使用“四字符代码”(即fourcc)在cv2.VideoWriter 中指定压缩代码。
Fourcc = cv2.cv.CV_FOURCC('M','S','V','C') #Microspoft Video 1
这种方法有效,只是视频对象的压缩质量始终设置为最大值。
如果我们让fourcc = -1,则会打开一个Windows 视频压缩对话框,允许用户选择视频压缩并在0 到100 之间设置压缩质量(或时间质量比)。
每个视频必须是 AVI,并且必须满足特定的文件大小要求。如果使用最大压缩质量,则视频文件太大。然而,要求用户为每个视频选择视频压缩和压缩质量会破坏脚本的自动化。
那么,如何在不使用 Windows 视频压缩对话框的情况下指定视频对象的压缩质量?
我的整个代码发布在下面
import cv2, os
Workspace = "J:\jpg to AVI test"
year = "2014"
file_extension = "avi"
Image_file_dir = Workspace + "\\12 - ECD-BONNETT CREEK Y INT (" + year + ")"
print Image_file_dir
Image_file_list = os.listdir(Image_file_dir)
print "Image_file_list: " + str(Image_file_list)
img_cnt = 0
for …
Run Code Online (Sandbox Code Playgroud) 堆栈溢出有几个类似的问题,但我无法解决这个问题.
我想获得fourcc
FFMpeg可以解码的avi编解码器的列表.
我知道如何获取所有格式ffmpeg -formats
和编解码器,ffmpeg -codecs
但两个列表都没有给我一个可访问的列表fourccs
.我也找不到文件.
我需要这个名单,让我的应用程序可以访问fourcc
一个的avi
文件,并确定是否使用ffmpeg
或VfW
(或DirectX
)尝试解码的文件.
有一些ffmpeg
命令能给我这个清单吗?
谁能告诉我元数据以常见的视频文件格式存储在哪里?如果它位于文件的开头,或分散在整个文件中.
我正在使用包含大量视频文件的远程对象存储,我想从这些文件中提取元数据,特别是视频持续时间和视频尺寸,而不将整个文件内容流式传输到本地计算机.
我希望这些元数据将存储在文件的前X个字节中,因此我可以从头开始而不是整个文件获取字节范围,将此部分文件数据传递给ffprobe
.
出于测试目的,我创建了一个22MB的MP4文件,并使用以下命令仅向ffprobe提供前1MB的数据:
head -c1024K '2013-07-04 12.20.07.mp4' | ffprobe -
Run Code Online (Sandbox Code Playgroud)
它打印:
avprobe version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2007-2013 the Libav developers
built on Apr 2 2013 17:02:36 with gcc 4.6.3
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1a6b7a0] stream 0, offset 0x10beab: partial file
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:':
Metadata:
major_brand : isom
minor_version : 0
compatible_brands: isom3gp4
creation_time : 1947-07-04 11:20:07
Duration: 00:00:09.84, start: 0.000000, bitrate: N/A
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 20028 kb/s, PAR 65536:65536 DAR 16:9, 29.99 fps, …
Run Code Online (Sandbox Code Playgroud) 我正在为一个应用程序(基于NetBeans构建)创建一些帮助内容,并认为在某些情况下能够在JavaHelp中显示教程视频或者有一个打开视频的链接会很有用.
我想<OBJECT>
也许可以使用标签,但我不知道要嵌入哪个对象.我从http://download.java.net/javadesktop/javahelp/jhug.pdf得到的JavaHelp知之甚少 ,从中得出结论我应该得到一些能够播放.avi和嵌入的轻量级Java组件它与<object>
标签.或者在帮助中有一个链接,在单独的窗口中打开.avi.
有没有人对如何做到这一点有任何指示?
编辑:
我已经尝试了更多关于添加自己的轻量级组件,但没有成功.所以我想知道我是否将组件放在错误的位置.如果我尝试将JButton添加到JavaHelp中
<object
classid="java:javax.swing.JButton">
</object>
Run Code Online (Sandbox Code Playgroud)
它出现在JavaHelp中就好了.
如果我尝试自己的按钮,就像
<object
classid="java:my.module.TestButton">
</object>
Run Code Online (Sandbox Code Playgroud)
我刚刚得到一些红色的"???"
TestBytton类只是
package my.module;
import javax.swing.JButton;
public class TestButton extends JButton{
}
Run Code Online (Sandbox Code Playgroud)
TestButton位于与javahelp-html相同的NetBeans项目中,而TestButton所在的包是公共的.有任何想法吗?
Edit2:好的,所以我更多地研究了这个.似乎最终班级com.sun.java.help.impl.CustomKit$CustomDocument
会尝试做一个
getClass().getClassLoader().loadClass("my.module.TestButton")
Run Code Online (Sandbox Code Playgroud)
这将导致ClassNotFoundException.这可能是因为我理解正确,因为将使用的类加载器只会找到调用的netbeans模块中的类JavaHelp Integration
.其中不是my.module.TestButton
.所以...我再次陷入困境.我认为我不能轻易地为该模块添加任何内容.
.
我一直在寻找使用C#代码从图像创建视频(.avi文件)的时间,
是否有任何图书馆可以维护视频?我一直在浏览AviFileWriter库,但是这个库似乎太固定了,因为我需要添加一些转换和其他元素.
那么如何使用C#来满足我的需求呢?我不在乎编码是否复杂.