【发布时间】:2021-01-19 05:10:41
【问题描述】:
我需要测试一个将 YUV420P(和其他 YUV 格式)渲染为 RGB 的 OpenGL 着色器。仅仅为此解码视频就太过分了。
是否有任何带有 Y、U 和 V 缓冲区的图像样本可供我发送到着色器?
在谷歌上,我只找到了不再托管这些图片的旧网站。
也许有一种方法可以使用 ffmpeg 从任何视频中轻松提取帧?
【问题讨论】:
标签: opengl video ffmpeg decode
我需要测试一个将 YUV420P(和其他 YUV 格式)渲染为 RGB 的 OpenGL 着色器。仅仅为此解码视频就太过分了。
是否有任何带有 Y、U 和 V 缓冲区的图像样本可供我发送到着色器?
在谷歌上,我只找到了不再托管这些图片的旧网站。
也许有一种方法可以使用 ffmpeg 从任何视频中轻松提取帧?
【问题讨论】:
标签: opengl video ffmpeg decode
您可以使用 ffmpeg 生成一个。
ffmpeg -f lavfi -i testsrc2=s=1280x720,format=yuv420p -vframes 1 sample.yuv
注意这是平面布局,所以首先是所有 Y 样本,然后是 U,然后是 V。
【讨论】:
Maybe there's a way to easily extract a frame from any video using ffmpeg?
(1) 用于转换现有图片(eg: PNG):
ffmpeg -i test.png -pix_fmt yuv420p test.yuv
(2) 用于逐帧转换视频(eg: 提取视频帧xx 编号处的图像):
ffmpeg -i test.mp4 -pix_fmt yuv420p -vf "select=eq(n\,xx)" -frames:v 1 test.yuv
(3) 用于按时间戳转换视频(eg: 提取特定时间的帧,ss 为HH:MM:SS 格式):
ffmpeg -ss 00:23:00 -i test.mp4 -pix_fmt yuv420p -frames:v 1 test.yuv
PS:无论是视频还是图像,如果您需要特定的分辨率,请使用视频过滤器scale,其中W:H 设置中的宽度或高度之一可以替换为@ 987654330@ 保持纵横比(如果需要):
ffmpeg -i test.png -pix_fmt yuv420p -vf "scale=1280:720" test.yuv
【讨论】: