首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么从ffmpeg读取的yuv数据与原始输入的Yuv数据不同?

从ffmpeg读取的YUV数据与原始输入的YUV数据不同的原因有几个可能的因素:

  1. 压缩算法:ffmpeg通常会使用压缩算法对视频进行编码和解码。在编码过程中,为了减小文件大小,可能会使用一些压缩算法对YUV数据进行压缩,从而导致解码后的数据与原始输入的YUV数据不同。这种压缩算法可以是有损压缩,即在压缩过程中会丢失一些细节信息,或者是无损压缩,即在压缩过程中不会丢失任何信息。
  2. 色彩空间转换:YUV数据通常使用不同的色彩空间表示,如YUV420、YUV422、YUV444等。在视频处理过程中,可能会进行色彩空间的转换,从而导致解码后的YUV数据与原始输入的YUV数据不同。这种转换可以是从高色彩空间到低色彩空间的降采样,或者是从低色彩空间到高色彩空间的插值。
  3. 数据格式:YUV数据可以以不同的数据格式存储,如Planar、Semi-Planar、Packed等。不同的数据格式对Y、U、V分量的存储方式有所不同,因此解码后的YUV数据与原始输入的YUV数据可能采用不同的数据格式,导致数据不同。

为了解决这个问题,可以尝试以下方法:

  1. 检查解码参数:在使用ffmpeg进行解码时,可以检查解码参数是否正确设置,包括压缩算法、色彩空间、数据格式等。确保解码参数与原始输入的YUV数据一致。
  2. 转换数据格式:如果解码后的YUV数据与原始输入的YUV数据采用不同的数据格式,可以使用ffmpeg提供的相关函数进行数据格式的转换,将解码后的YUV数据转换为与原始输入的YUV数据相同的格式。
  3. 调整解码器选项:有时候,解码器的默认选项可能会导致解码后的YUV数据与原始输入的YUV数据不同。可以尝试调整解码器的选项,如使用不同的解码器、调整解码器的参数等。

需要注意的是,以上方法仅供参考,具体的解决方案可能因具体情况而异。在实际应用中,可以根据具体需求和场景进行调整和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)

FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24…)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法。...下面来看一个视频解码的简单例子,这个程序完成了对”北京移动开发者大会茶歇视频2.flv”(其实就是优酷上的一个普通视频)的解码工作,并将解码后的数据保存为原始数据文件(例如YUV420,YUV422,RGB24...return 0; } 从代码中可以看出,解码后的视频帧数据保存在pFrame变量中,然后经过swscale函数转换后,将视频帧数据保存在pFrameYUV变量中。...pCodecCtx->height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); 也是把PIX_FMT_***改了就可以了 最后,如果想将转换后的原始数据存成文件...经过研究发现,在FFMPEG中,图像原始数据包括两种:planar和packed。

2.8K10

如何渲染最原始的yuv视频数据?

这样以来,我们就可以将yuv图像拆分为3个通道来读取。但是,拆分为3个通道来读取,最后如何重新合成一个RGBA颜色值呢?...这个时候,之前学过的纹理单元就可以派上用场了,我们可以定义3个纹理单元,分别读取yuv图像的3个通道的数据,最后在片段着色器中进行合成,然后转化为RGBA值即可。...二.读取解析yuv视频文件   想要读取yuv视频数据,我们首先得清楚它的内部结构。...我们先来看下yuv转rgb的公式:    我们首先需要知道的是yuv中的u,v指的是红色R和蓝色B与亮度Y的偏差,u和v的默认值都是128,我们把128代入公式,正好R=Y,R=B。...在opengl es2.0编程中,用于绘制的顶点数组数据首先保存在cpu内存,在调用glDrawArrays函数进行绘制时,需要将顶点数组数据从cpu内存拷贝到gpu显存中。

24710
  • 【FFmpeg】ffmpeg 命令行参数 ⑥ ( 使用 FFmpeg 提取 YUV 像素格式数据 | 使用 FFmpeg 提取 RGB 像素格式数据 | RGB 与 YUV 之间的格式转换 )

    使用 FFmpeg 工具自己提取像素格式的视频数据 ; 2、提取 YUV 数据 执行下面的命令 , 可以 使用 ffmpeg 工具 从 input.mp4 视频文件 中提取 YUV420P 格式的数据...为 原始视频数据 ; output_yuv420p.yuv 设置 输出文件的 文件名称 ; 执行过程如下 : 输入 MP4 格式 视频文件 是 H.264 编码格式 , 1 分钟的视频大概有 13MB...播放设置 ; 三、RGB 与 YUV 之间的格式转换 1、设置分辨率与像素格式 将 RGB 格式的视频 转为 YUV 格式的视频 时 , 可以分别为 输入视频 和 输出视频 都设置 画面分辨率 具体的像素格式...输出视频 的 分辨率 和 像素格式 可以 不进行设置 , 默认与 输入视频 的 参数相同 ; 输入视频 必须设置 分辨率 和 像素格式 , 否则无法进行 像素格式的转换 ; 2、设置分辨率与像素格式...视频文件 ; 3、设置分辨率与像素格式 - 只设置输入文件的参数 执行 ffmpeg -pix_fmt rgb24 -s 320x240 -i output_rgb24.rgb -pix_fmt yuv420p

    1.1K10

    ffmpeg中avframe的YUV格式数据到OpenCV中Mat的BGR格式转换

    ffmpeg实现音视频编解码是非常常用的工具,视频解码出来的raw数据是yuv格式,用来进行后续的图像处理一般是RGB格式的。...所以需要从yuv到rgb或者bgr的转换,ffmpeg提供了相应的转换API函数: 下面代码中dec_ctx是解码器上下文,AV_PIX_FMT_BGR24是要转换成的图像数据格式,通过avpicture_get_size...()函数获取图像的数据占用空间大小,并使用av_malloc()分配一个outBuff。..., NULL, NULL); } cv::Mat img = cv::Mat::zeros(dec_ctx->height, dec_ctx->width, CV_8UC3); 使用ffmpeg...的sws_scale()接口函数实现YUV格式的video_frame到BGR格式的video_frameBGR的转换,数据保存在缓冲outBuff中,从outBuff中拷贝到Mat中就得到一副BGR图像供

    2.8K90

    从Bitmap中获取YUV数据的两种方式

    从Bitmap中我们能获取到的是RGB颜色分量,当需要获取YUV数据的时候,则需要先提取R,G,B分量的值,然后将RGB转化为YUV(根据具体的YUV的排列格式做相应的Y,U,V分量的排列) 所以这篇文章的真正题目叫...“从Bitmap中获取RGB数据的两种方式” ?...(Buffer dst) Bitmap中的像素数据将copy到buffer中,buffer中每一个pixel都是按RGBA四个分量的顺序进行排列的 两种接口返回的颜色通道顺序不同,在取值的时候需要特别注意...进入到adjustRectangle方法,可以发现压缩区域的宽高被调整为偶数了 ? 为什么w,h必须要保证为偶数呢?...= 5760007, w * h = 1440000 从Bitmap中拿到RGB数据,再转化为YUV数据后,根据Y,U,V分量排列的不同可以任意组合为自己所需要的YUV格式~

    4.7K20

    流媒体解码及H.264编码推流简介

    Planar格式不同的分量分别存储在不同的数组中,例如AV_PIX_FMT_YUV420P存储方式如下: data[0]: Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8…… data...[],const int dstStride[] 为输入输出图像数据各颜色通道每行存储的字节数数组; int srcSliceY 为从输入图像数据的第多少列开始逐行扫描,通常设为0; int srcSliceH...为需要扫描多少行,通常为输入图像数据的高度; sws_freeContext 程序流程 Flow Chart1.png 大体上分四个大步骤: 1.各种初始化 Opencv读取视频流...FFmpeg进行推流 接下来我们来细化流程。 Opencv读取视频流 打开并读取视频帧使用VideoCapture类。open来打开。打开完成后可获取相关的视频信息。...前面FFmpeg支持的像素格式有讲到 ///rgb to yuv //输入的数据结构 uint8_t *indata[AV_NUM_DATA_POINTERS] = { 0 }; //indata[

    1.8K50

    FFmpeg简易播放器的实现-最简版

    例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。 解封装 将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。...例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。 解码 将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。...从视频文件中读取一个packet // packet可能是视频帧、音频帧或其他数据,解码器只会解码视频帧或音频帧,非音视频数据并不会被 // 扔掉、从而能向解码器提供尽可能多的信息...codec: 对应数据结构AVCodec 编解码器。编码器将未压缩的原始图像或音频数据编码为压缩数据。解码器与之相反。...2.3.2 读取视频数据 调用av_read_frame()从输入文件中读取视频数据包。

    1.5K30

    微信 Android 视频编码爬过的那些坑

    摄像头,以及视频编码相关的API,Google一直对这方面的控制力非常差,导致不同厂商对这两个API的实现有不少差异,而且从API的设计来看,一直以来优化也相当有限,甚至有人认为这是“Android上最难用的...调用的时候需要先初始化MediaCodec作为视频的编码器,然后只需要不停传入原始的YUV数据进入编码器就可以直接输出编码好的h264流,整个API设计模型来看,就是同时包含了输入端和输出端的两条队列:...因此,作为编码器,输入端队列存放的就是原始YUV数据,输出端队列输出的就是编码好的h264流,作为解码器则对应相反。...,然后再通过queueInputBuffer把原始YUV数据送入编码器,而在输出队列端同样通过getOutputBuffers和dequeueOutputBuffer获取输出的h264流,处理完输出数据之后...,前后两行四个临近点算出最终图片的四个像素点,对于源图片的每行像素,我们可以使用Neon直接实现,以缩放Y分量为例: 上面使用的Neon指令每次只能读取和存储8或者16位的数据,对于多出来的数据,只需要用同样的算法改成用

    9.6K55

    花椒前端基于WebAssembly 的H.265播放器研发

    video 标签显示或声卡播放 视频解码的目的就是解压缩,把视频数据还原成原始的像素,声音解码就是把 mp3/aac 等格式还原成原始的 PCM 格式。...但我们知道,FFmpeg 是用 C 语言开发的,如何把 FFmpeg 运行在 Web 浏览器上,并且给其输入待解码的直播流数据呢?使用 WebAssembly 能够解决我们的问题。...Decoder 负责与由 FFmpeg 编译生成的 Wasm 发送原始待解码数据和接收已解码后的数据。...); opaque 包含一组指向自定义数据源的操作指针,是可选参数; read_packet 和 write_packet 是两个回调函数,分别用于从自定义数据源读取和向自定义数据源写入,注意这两个方法在待处理数据不为空时是循环调用的...FFmpeg 通过自定义 IO 读取数据进行解码的处理过程如下图所示: ?

    5.9K96

    FFmpeg简易播放器的实现-视频播放

    例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。 解封装 将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。...例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。 解码 将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。...codec: 对应数据结构AVCodec 编解码器。编码器将未压缩的原始图像或音频数据编码为压缩数据。解码器与之相反。...---[SDL_UpdateYUVTexture()]----> display 2.4 解码及显示过程 2.4.1 读取视频数据 调用av_read_frame()从输入文件中读取视频数据包...从视频文件中读取一个packet // packet可能是视频帧、音频帧或其他数据,解码器只会解码视频帧或音频帧,非音视频数据并不会被 // 扔掉、从而能向解码器提供尽可能多的信息 //

    4.5K40

    音视频八股文(3)--ffmpeg常见命令(2)

    由于保留了原始编码格式,因此输出文件的封装格式与输入文件相同。同时,在第一个命令中使用了 -vn 参数指定只输出音频流,而在第二个命令中使用了 -an 参数指定只输出视频流。...提取视频 从 test.mp4 视频文件中提取视频流,并保留原始编码格式,输出为 H.264 编码格式的文件 test_copy.h264: ffmpeg -i test.mp4 -vcodec copy...11 提取像素格式和PCM数据 提取像素格式 提取YUV 从 test_1280x720.mp4 视频文件中提取前 3 秒的视频数据,并输出为 YUV 格式文件 yuv420p_orig.yuv,分辨率与源视频相同...12-ffmpeg命令转封装 保持编码格式 将视频文件 test.mp4 中的视频数据和音频数据分别以原始编码格式拷贝到输出文件 test_copy.ts 中: ffmpeg -i test.mp4 -...修改音频码率 将视频文件 test.mp4 中的音频码率限制为 192kpbs,并重新编码音频数据,将编码后的音频数据和原始视频流混合保存为 MP4 文件 output_ba.mp4: ffmpeg -

    1.1K121

    微信团队分享:微信Android版小视频编码填过的那些坑

    调用的时候需要先初始化MediaCodec作为视频的编码器,然后只需要不停传入原始的YUV数据进入编码器就可以直接输出编码好的h264流。...整个API设计模型来看,就是同时包含了输入端和输出端的两条队列: ? 因此,作为编码器,输入端队列存放的就是原始YUV数据,输出端队列输出的就是编码好的h264流,作为解码器则对应相反。...,然后再通过queueInputBuffer把原始YUV数据送入编码器,而在输出队列端同样通过getOutputBuffers和dequeueOutputBuffer获取输出的h264流,处理完输出数据之后...上面使用的Neon指令每次只能读取和存储8或者16位的数据,对于多出来的数据,只需要用同样的算法改成用C语言实现即可。...H.264的特点与优势》 《即时通讯音视频开发(十四):实时音视频数据传输协议介绍》 《即时通讯音视频开发(十五):聊聊P2P与实时音视频的应用情况》 《即时通讯音视频开发(十六):移动端实时音视频开发的几个建议

    2.6K30

    音视频八股文(3)--ffmpeg常见命令(2)

    由于保留了原始编码格式,因此输出文件的封装格式与输入文件相同。同时,在第一个命令中使用了 `-vn` 参数指定只输出音频流,而在第二个命令中使用了 `-an` 参数指定只输出视频流。...11 提取像素格式和PCM数据 提取像素格式 提取YUV * 从 `test_1280x720.mp4` 视频文件中提取前 3 秒的视频数据,并输出为 YUV 格式文件 `yuv420p_orig.yuv...`,分辨率与源视频相同(默认为 1280x720): ``` ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv ```...* 从 `test_1280x720.mp4` 视频文件中提取前 3 秒的视频数据,并输出为 YUV 格式文件 `yuv420p_320x240.yuv`,同时将输出分辨率设置为 320x240:...● 视频分辨率可以不同,但是编码格式需要统一 ● 音频编码格式需要统一,音频参数(采样率/声道等)也需要统一 # 14-fmpeg命令图片与视频互转 截取一张图片 ```bash ffmpeg -i

    2K10

    FFmpeg 内容介绍 音视频解码和播放

    为什么可以压缩 ● 去除冗余信息 ○ 空间冗余:图像相邻像素之间有较强的相关性 ○ 时间冗余:视频序列的相邻图像之间内容相似 ○ 编码冗余:不同像素值出现的概率不同 ○...X ● RGB转化到YUV空间 亮度分量Y与三原色有如下关系: 主流的编解码标准的压缩对象都是YUV图像 解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。...解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。...例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。 解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。...avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); 打开一个输入流并读取头

    2.2K12

    更高效直观,腾讯云媒体处理MPS视频评测系统帮助企业精准权衡性能成本

    以原始视频为参考,将转码后的视频与原始视频进行对比是评价视频质量的一类方法,这类方法属于视频质量评测中的全参考方法,精确性较高。...从单个评测指标中可以看出转码后的视频与原始视频之间的质量差异,为评估不同转码方式(编码器)之间的差异,需要知道编码器输出的流在不同码率下的质量。...1+N 个视频帧 {r, m1, m2, ..., mN},写入到 1+N 个帧缓存队列中,其中 r 是参考视频帧,mK 为第 K 个对比视频帧; 从 1+N 个队列中各读取一帧,将参考视频帧 r 与对比视频帧...,从队列中读取一个帧对,输入到 filter 中计算评分; 汇总评测结果。...系统会对输入视频进行评分,获取每个视频的码率及整体分数,绘制 RD 曲线,展示不同编码方式下码率与评分的关系;计算 BD-Rate,评估不同编码器之间的差异,生成评测报告。

    17310

    FFmpeg命令也就这几类了吧

    如下为一个展示的实际的输出结果: 3.2 录制 FFmpeg支持从不同的输入源进行录制,下面是几个常见的录制命令: 3.2.1 录制摄像头 在macOS中,可以使用以下命令调用内置摄像头进行录制: ffmpeg...3.4 处理原始数据 FFmpeg可以处理未经过压缩的原始视频数据,通常用于专业视频编辑和处理。...3.4.1 转换视频为原始数据 以下命令用于将MP4视频文件转换为YUV格式的原始数据: ffmpeg -i input.mp4 -f rawvideo -pix_fmt yuv420p output.raw...其中,-f rawvideo指定输出格式为原始数据,-pix_fmt yuv420p指定像素 3.4.2 转换原始数据为视频 以下命令用于将YUV格式的原始视频数据转换为MP4文件: ffmpeg -...总结 本文系统性地介绍了FFmpeg命令的基础格式及其主要命令的使用场景,并详细演示了FFmpeg在查询文件信息、录制、音视频分解与封装、处理原始数据、裁剪与合并、视频图片转换、直播推流、滤镜应用等方面的操作方法

    11410

    FFmpeg 使用教程

    AVDevice 输入输出设备库,比如,需要编译出播放声音或者视频的工具ffplay,就需要确保该模块是打开的,同时也需要libSDL的预先编译,因为该设备模块播放声音与播放视频使用的都是libSDL库...数据帧/数据包(Frame/Packet) 通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。...AVStream 对流的抽象 AVCodecContext与AVCodec对编解码格式以及编解码器的抽象 AVPacket与AVFrame对于编码器或者解码器的输入输出部分,也就是压缩数据以及原始数据的抽象...undefined分配出解码之后的数据所存放的内存空间,以及进行格式转换需要用到的对象 读取流内容并且解码undefined打开了解码器之后,就可以读取一部分流中的数据(压缩数据),然后将压缩数据作为解码器的输入...,解码器将其解码为原始数据(裸数据),之后就可以将原始数据写入文件了。

    1.5K10

    微信 Android 视频编码爬过的那些坑

    摄像头,以及视频编码相关的API,Google一直对这方面的控制力非常差,导致不同厂商对这两个API的实现有不少差异,而且从API的设计来看,一直以来优化也相当有限,甚至有人认为这是“Android上最难用的...调用的时候需要先初始化MediaCodec作为视频的编码器,然后只需要不停传入原始的YUV数据进入编码器就可以直接输出编码好的h264流,整个API设计模型来看,就是同时包含了输入端和输出端的两条队列:...因此,作为编码器,输入端队列存放的就是原始YUV数据,输出端队列输出的就是编码好的h264流,作为解码器则对应相反。...把原始YUV数据送入编码器,而在输出队列端同样通过getOutputBuffers和dequeueOutputBuffer获取输出的h264流,处理完输出数据之后,需要通过releaseOutputBuffer...指令每次只能读取和存储8或者16位的数据,对于多出来的数据,只需要用同样的算法改成用C语言实现即可。

    1.5K110
    领券