首页
学习
活动
专区
工具
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)

FFMPEGswscale提供了视频原始数据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。

2K10

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

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

14510

FFmpegffmpeg 命令行参数 ⑥ ( 使用 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

24110

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.5K20

ffmpeg中avframeYUV格式数据到OpenCV中MatBGR格式转换

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.6K90

流媒体解码及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.7K50

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

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

1.4K30

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

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

5.6K96

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

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

9.2K55

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

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

4.4K40

音视频八股文(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 -

940121

音视频八股文(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

1.8K10

FFmpeg 使用教程

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

1.4K10

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

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

2.5K30

音视频开发之旅(34) - 基于FFmpeg实现简单视频解码器

目录 FFmpeg解码过程流程图和关键数据结构 mp4通过FFmpeg解码YUV裸视频数据 遇到问题 资料 收获 一、FFmpeg解码过程流程图和关键数据结构 FFmpeg解码涉及知识点比较多,...YUV 4:2:0采样,每四个Y共用一组UV分量。 YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式不同处在U平面和V平面的位置不同。...NV12NV21类似,U 和 V 交错排列,不同在于UV顺序。...YUV相应数据也是该对象中读取 AVFrame *pFrameYUV = av_frame_alloc(); //out_buffer中数据用于渲染,且格式为YUV420P...ffmpeg函数介绍 100行代码实现最简单基于FFMPEG+SDL视频播放器(SDL1.x) 最简单基于FFmpeg移动端例子:Android 视频解码器-单个库版 图文详解YUV420数据格式

1.3K00

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

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

1.4K110

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

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

2.1K12

(四)FFmpeg 命令行工具fftools

很多读者可能会问,我们是做移动端开发,为什么要学习FFmpeg 命令行工具?其实客户端是可以直接调用FFmpeg 命令行工具实现具体功能,而不需要去深入了解FFmpeg具体方法。...主要参数 -i 设定输入流。 -f 设置输出格式。 -y 若输出文件已存在时则覆盖文件。 -fs 超过指定文件大小时则结束转换。 -ss 指定时间开始转换。...vcodec( -c:v ) 设置视频视频编解码器,未设置时则使用输入文件相同之编解码器。...acodec ( -c:a ) 设置声音编解码器,未设置时视频相同,使用输入文件相同之编解码器。 an 不处理声音,于仅针对视频做处理时使用。 vol 设置音量大小,256为标准音量。...ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi iOS调用FFmpeg Tool (1)第一种调用方式 简单容易理解

1.6K30
领券