使用ffplay命令直接保存yuv数据

本文介绍如何使用FFmpeg和FFplay工具进行YUV格式视频的播放、保存及格式转换。涵盖直接播放YUV文件、从H.264流中提取YUV数据、以及使用不同色彩空间和分辨率进行视频处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想用ffplay直接保存yuv对比解码器结果,居然没搜到。
得到大侠指点记录一下。

播放视频流:

ffplay E:\backup\1280x800.h264

播放YUV:

ffplay.exe E:\backup\1280x800nv21.yuv -pixel_format nv21  -video_size 1280x800 -x265-params color_range=pc

查看信息:

ffprobe -v error -show_format -show_streams C:\Users\Administrator\Downloads\video.264

直接保存yuv

ffmpeg -i input.264 output.yuv -pix_fmt nv21

格式转换:

ffmpeg -s 1280x800 -pix_fmt yuv420p -color_range 2 -i output1280x800_full_rang.yuv -pix_fmt rgb24 aaaa.rgb

验证可以输入的格式有:nv21 nv12 rgb888 rgba

查看支持的格式:

ffplay -pix_fmts
FLAGS NAME            NB_COMPONENTS BITS_PER_PIXEL
-----
IO... yuv420p                3            12
IO... yuyv422                3            16
IO... rgb24                  3            24
IO... bgr24                  3            24
IO... yuv422p                3            16
IO... yuv444p                3            24
IO... yuv410p                3             9
IO... yuv411p                3            12
... ...
### YUV 协议及相关使用方法 YUV 是一种颜色编码方式,广泛应用于视频和图像处理领域。它通过将亮度 (Y) 和色度 (U, V) 分离来表示色彩信息[^1]。以下是关于 YUV 的详细介绍及其使用方法: #### 一、YUV 基本概念 YUV 颜色空间的核心在于将亮度信号 (Y) 和两个色差信号 (U, V) 进行分离。这种设计使得即使缺少色度分量 (U,V),仍然可以通过仅保留亮度分量 (Y) 来显示黑白图像。 - **Y**: 表示亮度分量,决定了图像的明暗程度。 - **U/V**: 表示色度分量,分别代表蓝色差和红色差。 在实际应用中,为了节省带宽并优化性能,通常会对 U 和 V 色度分量进行降采样,形成不同的采样格式,如常见的 4:2:0、4:2:2 等[^3]。 --- #### 二、常见 YUV 采样格式 不同采样格式会影响图像的质量和存储效率。以下是几种典型的采样格式说明: - **4:4:4**: 每个像素都有独立的 Y、U、V 分量,无任何压缩。 - **4:2:2**: 水平方向每两个像素共享一组 UV 分量,垂直方向保持不变。 - **4:2:0**: 水平和垂直方向均每隔两行/列共享一组 UV 分量,进一步减少数据量。 例如,在 YUYV 格式下(属于 YUV422),每个宏块由四个字节组成,其中第一个字节为 Y0,第二个字节为 U0,第三个字节为 Y1,第四个字节为 V0[^2]。 --- #### 三、YUV 数据存储与转换 当从硬件设备捕获原始 YUV 数据时,需注意其具体存储格式以及后续处理逻辑。如果直接保存数据不符合预期标准,则可能导致无法正常解析或播放[^3]。 ##### 示例代码:BMP 转换为 YUV 文件 以下是一个简单的 Python 实现 BMP 到 YUV 的转换过程[^4]: ```python import cv2 import numpy as np def bmp_to_yuv(input_bmp_path, output_yuv_path, frame_count=200): img = cv2.imread(input_bmp_path) height, width = img.shape[:2] with open(output_yuv_path, 'wb') as f: for _ in range(frame_count): yuv_img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV_I420) f.write(yuv_img.tobytes()) bmp_to_yuv('input.bmp', 'output.yuv') ``` 此脚本会读取指定路径下的 BMP 图片,并将其重复生成一定数量的帧后存入目标 YUV 文件中。 --- #### 四、YUV 文件查看工具 由于裸 YUV 文件不具备头部信息描述分辨率或其他参数,因此需要借助特定软件才能正确解读内容。推荐使用的工具有 FFmpeg 或者专门针对 YUV 设计的应用程序 pYUV[^3]。 调用命令如下所示: ```bash ffplay -f rawvideo -pix_fmt yuv420p -s 640x480 input.yuv ``` 上述指令假设输入文件采用 VGA 尺寸且遵循 YUV420P 编码规则。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值