Articles of video

DirectShow ISampleGrabber:样本颠倒,颜色通道反转

我必须使用MS DirectShow从相机捕捉video帧(我只想要原始像素数据)。 我能够构buildgraphics/滤波器networking(捕获设备filter和ISampleGrabber)并实现callback(ISampleGrabberCB)。 我收到适当大小的样本。 但是,它们总是颠倒(垂直翻转,即不旋转),颜色通道是BGR顺序(不是RGB)。 我试图将BITMAPINFOHEADER中的biHeight字段设置为正值和负值,但没有任何效果。 根据MSDN文档,ISampleGrapper :: SetMediaType()忽略video数据的格式块。 这里是我看到的(用不同的相机logging的,不是DS),以及DirectShow ISampleGrabber给我的东西:“RGB”实际上分别是红色,绿色和蓝色: 我正在使用的代码示例略有简化: // Setting the media type… AM_MEDIA_TYPE* media_type = 0 ; this->ds.device_streamconfig->GetFormat(&media_type); // The IAMStreamConfig of the capture device // Find the BMI header in the media type struct BITMAPINFOHEADER* bmi_header; if (media_type->formattype != FORMAT_VideoInfo) { bmi_header = &((VIDEOINFOHEADER*)media_type->pbFormat)->bmiHeader; } else if (media_type->formattype != […]

如何在MJPG opencv捕捉摄像头的video

我已经买了两台Genius facecam 1000x摄像机,并试图build立一个立体摄像机,摄像机的v4l2-ctl输出如下: ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'YUYV' Name : YUYV 4:2:2 Index : 1 Type : Video Capture Pixel Format: 'MJPG' (compressed) Name : Motion-JPEG 正如你所看到的像素格式MJPG是支持的,从这个这个像素格式是必要的,但是当我尝试从两个摄像头捕获video的VIDIOC_STREAMON: No space left on device错误仍然发生的第二个相机,我只能以320×240分辨率获得立体声video! 我尝试了以下两个,但不适合我。 v4l2-ctl –set-fmt-video=width=640,height=480,pixelformat=1 将FOURCC设置为MJPG会导致HIGHGUI ERROR: V4L: Property <unknown property string>(6) not supported by device错误HIGHGUI ERROR: V4L: […]

如何通过丢帧来加速video?

我有一个30分钟的video。 我想做一个加速的版本,比如15分钟。 我可以通过删除每个第二帧来做到这一点。 我怎么能在Linux上做到这一点? 我正在玩gstreamer,看起来很酷。 有没有办法与gstreamer做到这一点? 什么是gst-launch命令行来做到这一点? 我的源video是在Motion JPEG,所以我确实有帧丢弃。 即使是使用关键帧,还是应该有一种“加倍速度”的方法吗? 我想要一个命令行的方式来做到这一点,因为我想自动化它。

通过FFmpeg和PHP创build目录中的所有文件的video缩略图

我搜遍了谷歌和StackOverFlow,但仍然没有find一个解决scheme。 我想要生成目录中所有mp4video文件的video缩略图,并将缩略图命名为“filename.mp4”.jpg 我在我的服务器上安装了ffmpeg和ffmpeg-php。 我同时也成功创build了一个文件的缩略图。 所以这是情况,我有一个名为上传的目录,有很多的MP4video。 现在,当我运行脚本时,应自动创build大小为100×100的缩略图,并将其放在另一个文件夹“skrin”中。 例如:xxx.mp4应该有xxx.mp4.jpg有拇指名称。 重要提示:我的文件名在文件名中有空格,单引号,括号等。 所以脚本应该能够处理这个。 有人能帮我吗? 我使用以下shell命令在PHP中使用exec生成单个video的拇指。 exec("/usr/local/bin/ffmpeg -itsoffset -105 -i 'xxx haha.mp4' -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100×100 'xxx haha.mp4.jpg'");

使用VLC imem从内存中播放h264video文件,但接收错误“主stream错误:不能预先填充缓冲区”

我有一个加载到内存中的h264video文件,我尝试用imem参数“imem-cat = 4”播放它,这样vlc将使用访问模块来解复用video,而vlc启动并接收我的imem成功参数: [0x7f38a0000e28] access_imem demux debug: Using get(0x404e1d), release(0x404e91), data(0x7fff5b4a9430), cookie("IMEM") 这个类别也意味着我不必提供DTS和PTS。 用于VLC的imem模块没有很好的文档logging,但是我已经在几个地方发现了提示,例如 https://forum.videolan.org/viewtopic.php?t=111917 https://forum.videolan.org/viewtopic.php?f=32&t=93842 在python中使用内存中的libVLC播放video 我的imem-get函数只是简单地将缓冲区指针设置为第一次调用时的video数据,返回0,任何进一步的调用返回1表示没有更多的数据: int MyImemGetCallback (void *data, const char *cookie, int64_t *dts, int64_t *pts, unsigned *flags, size_t * bufferSize, void ** buffer) { ImemData* imem = (ImemData*)data; cookie = imem->cookieString; if(imem == NULL || imem->allBuffered==true) //indicate all data has been […]

在轨道上转换video到Flash和MP4ruby?

我目前是我们青less年教会基地的主要开发者(只读dev!)。 http://mybase.co 目前我正在做一个“2.0”风格的网站迭代,希望能使内容更丰富,移动性更强。 我们一直在使用Vimeo来托pipe我们的video,但想开始托pipe我们自己的video,这样当我们想要制作一个iPhone应用程序来传输最新内容时,我们已经在我们自己的服务器上准备了一个大型的video目录,它给了我们很多其他的灵活性.. 当我们将video上传到Flash版本和iOS版本时,我正在寻找转换video的方法。 该网站是build立在轨道上的ruby,托pipe在Ubuntu 10.04服务器上,我有完整的服务器的根权限,可以安装任何必要的东西.. 基本上我问的是: 什么是从ruby转换video最简单的方法(我听说一些关于FFMPEG的嗡嗡声) 它会完全占用资源吗? (它的虚拟化服务器与1.5GB的主机托pipe2个其他网站,所以无论如何,以减less资源使用将是非常棒的,即使需要几个小时的转换) 有没有一个“好”的方法呢? (一个干净的API,可以使用系统(“convert ma videoze”)进行脱壳) 谢谢 :) 丹尼尔

如何从脚本validationvideo文件?

我有一个有很多video文件的服务器。 恢复后,我注意到一些文件的校验和改变了。 由于我没有所有文件的校验和,我想编写一个脚本来validation文件的完整性。 档案( tar t , unzip -t , rar t等)或图像( convert image.jpg /tmp/test.png )很简单。 我需要将哪些选项传递给mplayer或vlc或Linux上的任何其他video工具来达到相同的效果(即validation文件内容而不必观看整个video)?

从Linux命令行加水印video

有谁知道如何使用一个简单的工具从Linux命令行中的水印video? 当前版本不支持ffmpeg中的水印,并且需要自定义编译。 最大。

在Linux上使用FFmpeg从OpenCV 3编写x264

我无法通过FFmpeg(“X”,“2”,“6”,“4”,FOURCC)使用OpenCV 3编写h264video。 到目前为止,我已经看到所有相关的post,但没有任何帮助。 码: cv::VideoWriter writer(output_path.string(), CV_FOURCC('X','2','6','4'), 60, frame_size); 输出: OpenCV:FFMPEG:标记0x34363258 /'X264'不支持编解码器ID 28和格式'MP4 / MP4(MPEG-4 Part 14)'OpenCV:FFMPEG:回退使用标记0x00000021 /'!???' 由此产生的video非常小(按字节),不可读。 设置four_cc为-1的结果来自FFmpeg的“未知标签”,我没有得到任何提示select其他人build议的编解码器。 OpenCV 3文档指出: 带MP4容器的FFMPEG后端本身使用其他值作为fourcc代码:请参阅ObjectType ,因此您可能会收到来自OpenCV的关于fourcc代码转换的警告消息。 这个页面他们没有列出h264 / x264,我不知道如何解释这个声明,因为早先的SOpost似乎都列出了X.2.6.4作为适当的代码。 使用H.2.6.4实际上给出相同的输出。 任何build议/解决方法? PS的ffmpeg是最新的Ubuntu维护者,它列出它configuration了–enable-libx264 编辑:我试图使用mkv容器,而不是mp4。 关于标签不被支持的警告消失了,但是由此产生的video仍然是不可读的。

Gstreamer tcpserversink v0.10 vs 1.0和HTML5video标签

我在我的网站中embedded了一个HTML5video标签,其源代码是gstreamerstream。 我有一个工作在gst 0.10的pipe道: gst-launch-0.10 -v videotestsrc ! theoraenc ! oggmux ! queue ! tcpserversink port=8080 sync-method=2 我可以像这样通过vlc连接到这个stream: vlc tcp://localhost:8080 我也可以使用HTML5video标签中的url,并按预期显示video。 现在我试着去适应gst 1.0: gst-launch-1.0 -v videotestsrc ! theoraenc ! oggmux ! queue ! tcpserversink port=8080 sync-method=2 再次,我可以连接到stream与vlc, 但我不能在video标签中使用这个stream。 这让我疯狂,我把pipe道降到了最低限度,我不明白为什么它不起作用。 为什么它在旧的gst和vlc中工作,而不是在video标签中使用新的gst?