音视频开发:YUV实战
YUV基础自己看文章,推荐一篇文章:点击这里
1、生成YUV视频格式:
ffmpeg -i "源文件.mp4" -an -c:v rawvideo -pix_fmt yuv420p out.yuv
参数说明:
-
-i "源文件.mp4":指定输入文件名及地址。 -
-an:去掉音频流。这里的参数选项-an表示不需要音频,只保留视频部分。 -
-c:v rawvideo:指定输出视频编码方式,这里我们选择了无压缩的原始视频格式。 -
-pix_fmt yuv420p:指定像素格式,yuv420p 是最常用的像素格式,它允许您使用更少的存储空间来生成高质量图像。 -
out.yuv:指定输出文件名。
该命令会将输入文件 "源文件.mp4" 中的音频流移除,然后将剩余的视频流数据以 rawvideo 编码方式和 yuv420p 像素格式保存到输出文件 out.yuv 中。
2、播放YUV:
ffplay -f rawvideo -video_size 1920x1080 out.yuv
参数说明:
- `-f rawvideo`:指定视频格式,这里我们选择了无压缩的原始视频格式。
- `-video_size 1920x1080`:指定视频分辨率大小为 `1920x1080` 像素。
- `out.yuv`:指定要播放的文件名。
该命令会以 rawvideo 格式读取 `out.yuv` 文件并显示在屏幕上,并将视频窗口设置为 `1920x1080` 的分辨率。 `ffplay` 通过按原始帧速度(即输入视频的帧率)播放 `out.yuv` 中的视频数据。
3、播放Y分量
ffplay -f rawvideo -video_size 1920x1080 -vf extractplanes='y' out.yuv
参数说明:
- `-f rawvideo`:指定视频格式,这里我们选择了无压缩的原始视频格式。
- `-video_size 1920x1080`:指定视频分辨率大小为 `1920x1080` 像素。
- `-vf extractplanes='y'`:设置视频过滤器,这里使用 `extractplanes` 过滤器提取出 YUV 像素格式中的亮度信息(即 Y 通道)。
- `out.yuv`:指定要播放的文件名。
该命令会以 rawvideo 格式读取 `out.yuv` 文件并显示在屏幕上,并将视频窗口设置为 `1920x1080` 的分辨率。通过 `-vf extractplanes='y'` 指定视频过滤器,将输入视频的时间轴上的每一帧数据通过 `YUV` 转换成只有 `Y` 分量信息,即只剩下黑白图像的信息。然后 `ffplay` 使用播放特定格式的黑白视频。
4、播放UV分量
ffplay -f rawvideo -video_size 960x540 -vf extractplanes='y' out.yuv
分辨率除2 = UV分量
5、提取各分量
ffmpeg -i 1.mp4 -filter_complex "extractplanes=y+u+v[y][u][v]" -map "[y]" y.yuv -map "[u]" u.yuv -map "[v]" v.yuv
参数说明:
-
-i 1.mp4:指定需要进行处理的输入文件。 -
-filter_complex "extractplanes=y+u+v[y][u][v]":使用复杂过滤器操作,其中extractplanes=y+u+v表示从原始 YUV 视频文件中提取亮度、蓝色和红色分量,[y][u][v]分别表示输出结果的视频流名称及索引。 -
-map "[y]" y.yuv -map "[u]" u.yuv -map "[v]" v.yuv:将上一步直接生成的三个视频流[y][u][v]分别映射到不同的输出位置。这些位置被定义为分别为y.yuv、u.yuv和v.yuv的三个文件。这就是说明了[y] [u] [v]。
这条命令将会使用 ffmpeg 解码 1.mp4 文件,并利用复杂过滤器 extractplanes 从中提取出三个通道。然后,通过 -map 参数显式地使用这些输出结果,并将它们写入三个文件 y.yuv、u.yuv 和 v.yuv 中,以便以后使用或进一步处理。请注意,该命令只提取原始 YUV 数据,因此无法直接查看或播放输出文件。
相关推荐
09-SDL音视频渲染实战SDL安装和接口说明
【标题】 SDL音视频渲染实战:SDL安装与接口说明在深入探讨SDL(Simple DirectMedia Layer)音视频渲染实战之前,我们首先需要了解SDL的基本概念。
音视频基础+ffmpeg原理+项目实战一课完成音视频技术开发入门视频课程
通过这套《音视频基础+ffmpeg原理+项目实战一课完成音视频技术开发入门》课程,学习者不仅可以掌握音视频的基本概念和技术原理,还能通过实战项目加深理解并提升实践能力。
VisualCPP音视频编解码技术及实践2.pdf 后端 - C++.zip
通过以上内容的学习,读者将能够掌握C++在音视频编解码领域的核心技术和实战经验,为开发高效、高质量的音视频应用打下坚实基础。
ffmpeg/ffplay 源码解析 最完整的全套学习资源 源码 可直接编译
通过这套学习资源,你可以深入到FFmpeg和ffplay的底层,理解多媒体处理的细节,这对于从事音视频开发、流媒体服务、游戏开发等领域的工作都非常有帮助。
《C++音视频开发从放弃到入门》21个完整的实战项目源码
该资源包含一套系统化、结构清晰且高度实用的C++音视频开发实战项目集合,共计21个完整可运行的源码工程。


