OpenCV(C++):与输入相比,写出的文件很大
我正在尝试使用OpenCV(C ++)读取视频文件,将过滤器应用于每个帧,然后将新的修改后帧写入输出文件. 代码的关键部分是: int out_format = CV_FOURCC('M','P','4','2'); // can be another one double fps = media.get(CV_CAP_PROP_FPS), width = media.get(CV_CAP_PROP_FRAME_WIDTH), height = media.get(CV_CAP_PROP_FRAME_HEIGHT); // On Linux FFMPEG is used to write videos VideoWriter writer("./" + outputname + ".mkv", out_format, fps, Size(width, height) ); ....... ....... writer.write(newFrame);
0 2023-05-10
编程技术问答社区
VideoCapture在OpenCV 2.4.2中无法工作
我最近在Ubuntu 12.04中安装了OpenCV 2.4.2. cap = VideoCapture(0) 正在工作.但是我无法从某些视频源中获取帧. cap = VideoCapture("input.avi") img = cap.read() 给我一​​个零元素的numpy. 我还安装了FFMPEG 0.11,X264的最新快照,V4L-0.8.8(所有都是最新的稳定版本) cmake -D WITH_QT=ON -D WITH_FFMPEG=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_EXAMPLES=OFF WITH_V4L=ON .. make sudo make install 当我做cmake时,我得到了这个 - GNU GCC的检测版本:46(406) - 找到OpenExr:/usr/lib/libilmimf.so - 寻找linux/videodev.h - 寻找
6 2023-05-09
编程技术问答社区
如何用FFmpeg将灰度视频流编码为MPEG-1?
我有一个灰度视频流从一台Firewire天文学摄像机上传来,我想使用FFMPEG压缩视频流,但它不会接受MPEG1VIDEO编解码器的单个字节像素格式.如何使用FFMPEG API将灰度视频帧转换为FFMPEG接受的框架格式? 解决方案 MPEG-1仅接受YUV,因此您需要将框架转换为YUV格式.使用通过调用sws_getContext()创建的SwsContext结构,然后使用sws_scale(). 其他解决方案 灰度和YUV的关系非常简单 - YUV的" Y"与灰度完全相同. 将灰度转换为yuv的简单方法是 参见 this 参考量表之间的转换: 因此: Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 Cb = U = -(0.148 * R) - (0.291 * G)
4 2023-03-23
编程技术问答社区
通过图像比较算法的视频编解码器?
也许有人知道这是否可能. 比较图像质量几乎不可能没有主观影响.当某人对图像质量的评价为好时,至少有一个人,那并不是这样. 人类的偏好总是不同的. 所以,我想知道是否有通过将原始图像与以下问题进行比较的算法"对图像质量进行评分" 颜色变化(像素的差异像素 模糊率 工件和大小写 第一个是最简单的,因为您可以仅检查颜色的不同,并且可以在每个十六进制中给出3个值 两者都持续一次,我不知道这是否可能,但是可以通过边缘找到阻塞. ,国王的任务就是这样做,而不是一个图像,因为视频是用几帧完成的. 也许您的专家程序员可以告诉我,如果可以进行这样的自动化算法以将一些客观的测量划分带入评级图像质量.这也许可以使一些H.264平静下来,比x264好,并且比VP8和Blaaah People更好:) Andreas 第一个发布在此处发布 index.php?name = pnphpbb2&file = viewtopic&p = 9705 解决方案 这是一个
10 2023-03-22
编程技术问答社区
支持H.265/HEVC网络浏览器
是否有任何网络浏览器可以在HTML5视频元素中播放H.265/MPEG-4 HEVC编解码器?在哪个平台或硬件上? 当可用硬件解码时,我听到有关HEVC支持的谣言.使用HEVC硬件解码的当前GPU和CPU运输,我想知道其他哪些浏览器供应商正在遵循. Firefox已经适用于H.264 解决方案 它在IE和Edge中起作用,但仅当有硬件支持时.据报道,它可以在具有硬件支持的某些设备上用于Android浏览器和Chrome. . 来源: https://caniuse.com/#feat=hevc n.b.如果您努力使用H.265在网络内容中嵌入更好质量的视频,则还应考虑转编码,包括WebM: http://caniuse.com/webm/embed/.支持也是片状的,但由于芯片制造商越来越多地包括标准的硬件加速度(HEVC和VP9) ,因此绝对会迅速改善. 其他解决方案 否,没有浏览器支持H.265.在不久的将来不太可能增加支持. 编辑: 我更新
16 2023-01-31
编程技术问答社区
不能播放此视频。安卓视频查看安卓设备录制的mp4
我已经与其他formats一起寻找现有的潜在解决方案,而这些解决方案仍然响应上述错误. 最后,用同一设备录制了视频,并将其用作此应用程序的资源,但仍然不起作用. 设备:SGS2,Lenovo a820 视频类型:MPEG-4 video (video/mp4) videoView = (VideoView)findViewById(R.id.videoView); videoView.setVideoPath("android.resource://raw/sample.mp4"); videoView.start(); 解决方案 请参阅下面的代码段...问题是在路径声明中. String uriPath = "android.resource://"+getPackageName()+"/"+R.raw.aha_hands_only_cpr_english; Uri uri = Uri.parse(uriPa
2 2022-12-25
编程技术问答社区
视频|编解码器通过图像比较算法进行评分?
也许有人知道这是否可能. 比较图像质量几乎不可能没有主观影响.当某人对图像质量的评价为好时,至少有一个人,那并不是这样. 人类的偏好总是不同的. 所以,我想知道是否有通过将原始图像与以下问题进行比较的算法"对图像质量进行评分" 颜色变化(像素的差异像素 模糊率 工件和大小写 第一个是最简单的,因为您可以仅检查颜色的不同,并且可以在每个十六进制中给出3个值 两者都持续一次,我不知道这是否可能,但是可以通过边缘找到阻塞. ,国王的任务就是这样做,而不是一个图像,因为视频是用几帧完成的. 也许您的专家程序员可以告诉我,如果可以进行这样的自动化算法以将一些客观的测量划分带入评级图像质量.这也许可以使一些H.264平静下来,比x264好,并且比VP8和Blaaah People更好:) Andreas 第一个发布在此处发布 index.php?name = pnphpbb2&file = viewtopic&p = 9705 解决方案 这是一个
10 2022-11-23
编程技术问答社区
如何使用.so文件在安卓应用程序中为我的自定义视频编解码器创建一个.apk文件
我想创建一个可以以特定格式播放视频的应用程序或.APK文件. 为此,我已经编译了我的源文件并处理了对象文件, 从对象文件中,我使用命令 生成了一个共享库文件(.so) gcc -c -fPIC hello.c -o hello.o gcc hello.o -shared -o libhello.so 有人可以帮助我采用从Android Eclipse或Android SDK 中创建APK文件的步骤 创建APK文件时Java文件的重要性是什么... 解决方案 根据您上面提出的内容,我认为您不是使用Android NDK提供的工具链编译自定义解码器代码.我执行了您应该执行的相同任务. First of all what you need to do is: 1)创建一个Android项目 2)在Android项目的根目录的侧面,创建一个称为" JNI"的文件夹 3)将所有" C"代码(自定义解码器代码)转储到此文件夹中. 4)在具有解码
12 2022-11-21
编程技术问答社区
如何访问HTML5视频解码功能?
HTML5具有元素,该元素从服务器下载视频,解码并渲染.通常,如果并非总是会使用硬件加速解码(如果有). 可以访问仅解码功能吗?原因是我正在使用自定义流协议,因此在客户端,我已经编码了我需要解码和渲染的视频流. 不幸的是,视频解码器的纯JavaScript实现不适用,因为它们无法提供足够的性能.我仅对HVEC或H.264编解码器感兴趣. 解决方案 此问题的解决方案是 webrtc .可以集成外部编码器或使用嵌入式编码器.在浏览器中,webrtc客户端使用H/W解码. WEBRTC还提供实时流功能.兼容性还不错. 其他解决方案 可以访问仅解码功能吗? 不幸的是不是.我们只能访问与流源/源文件相关的高级API,具有有限的影响力,例如基于时间的位置,播放状态和各种事件.我们可以从当前解码的帧中将框架绘制为RAW RGB(a),但仅此而已. 原因是我正在使用自定义流协议等 客户端我已经编码了我需要解码的视频流和 渲染 您没有描述此
6 2022-11-17
编程技术问答社区
我怎样才能知道任何h264文件的持续时间?
我有一个文件,其中只有H264帧的形式为NAL单元. 所以现在有什么方法,所以我可以计算该文件的持续时间? 我不知道文件中有多少帧. 我只有文件大小. ps:我要做的就是使用C语言和Linux平台. 解决方案 容器文件 首先,没有H264 file的东西.可以有一个容纳H264编码视频的容器文件(MP4,AVI,MKV).该容器格式通常还包含数据,告诉您包含的视频持续时间.因此,您必须解析该文件,检查格式文档以查看持续时间保存的位置,然后提取. 最简单的方法是像奥古斯托的建议一样使用ffmpeg. nal字节流 如果您的文件仅是nal单位,那么一个接一个地保存了一个,例如在nal字节流中, 您可以获得视频持续时间!由于H264编码的图片无法容纳定时信息. 如果是这样,如果您知道视频FPS,您仍然可以进行近似...您需要计算文件中的所有帧: 序列参数集 图片参数集 流的结尾 序列结束 过滤数据 访问单元定界符 然后进行
12 2022-10-28
编程技术问答社区
三星S5设备中的视频压缩问题
我试图压缩视频.它在所有设备中工作都很好,但在三星s5 中,它给出了低于错误. 错误日志:android.media.MediaCodec$CodecException: Error 0xffffec77 下面有我的压缩功能 public boolean convertVideo(final String path) { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(path); String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KE
硬件加速的安卓版FFmpeg?
我为Android编辑了较旧的FFMPEG版本(如果我没记错的话是0.6.x). FFMPEG解码视频框架,将其缩放,然后我使用OpenGL将其绘制在屏幕上.据我所知,问题是解码和缩放 - 它们没有加速硬件. 我的问题是: 是ARM(Android)处理器加速FFMPEG硬件的最新版本? 我是错误的吗?即,有更好的方法吗? "这个"正在播放H264 HD视频作为视频实时墙纸 - 帧速率必须高,因此,随时需要硬件加速. 解决方案 我认为,是的.请参阅: http://ffmpeg.org/#pr9 . 在Android上具有硬件加速的硬件加速解码的主要版本是和谐的0.9 如果您使用了利用硬件加速度的解码器,那么当它可用时,我看不出如何做得更好... 其他解决方案 您需要的是ffmpeg汇编为霓虹灯.看: 其他解决方案 您也可以尝试使用libstagefright_h264来编译FFMPEG,我能够将其进行编译和读取视频文件属性,但无法使Avcode
96 2022-10-10
编程技术问答社区
在安卓系统中用webrtc保存视频文件的问题
我正在开发基于 webrtc 的视频聊天应用程序,目前视频通话正在运行,但我想使用 VideoFileRenderer 从远程视频流中录制视频,该接口有许多实现,例如:https://chromium.googlesource.com/external/webrtc/+/master/sdk/android/api/org/webrtc/VideoFileRenderer.java这是我正在使用的实现.它可以毫无问题地将视频保存到文件中,但在使用编解码器后我只能在桌面上播放它,因为文件是 .y4m 而不是 .mp4,当我尝试使用 VideoView 播放它时,它说它无法播放视频,即使我尝试使用 android 自带的 videoPlayer 播放视频也无法播放,我只能使用 MXPlayer、VLC 或任何其他在桌面上具有编解码器的应用程序播放. 简化问题:How can I play video.y4m on native android VideoView? 我会更简化,我
378 2022-10-10
编程技术问答社区
如何用FFmpeg对灰度视频流进行编码?
我有一个灰色的视频流从火线天文摄像机,我想使用FFmpeg来压缩视频流,但它不会接受单字节像素格式的MPEG1VIDEO编解码器。如何使用FFmpeg API将灰度视频帧转换为FFmpeg接受的帧格式? 解决方案 MPEG-1只接受YUV。所以将你的帧转换为yuv。使用SwsContext结构,通过调用sws_getContext创建它,然后使用sws_scale。 尝试rawvideo编解码器。你需要指定描述帧格式的pix_fmt参数 - 你的每个像素帧是1字节,但是它们是灰度的(你没有提到)?例如 ffmpeg -i INPUT -vcodec rawvideo -pix_fmt yuv420p output.avi 这里pix_fmt指定yuv420p这不是你需要的。使用适当的框架类型。 我将发布pix_fmt值的头文件的内容。尝试看看您的帧类型是否在其中定义。例如,查看PIX_FMT_RGB8(这是8位)。 / *
4354 2022-07-19
编程技术问答社区