使用 YUV 4:2:0 平面颜色模型在 Mac OS X 上制作 ffmpeg 屏幕截图
Making a ffmpeg screen capture on Mac OS X using YUV 4:2:0 Planar color model
我使用 ffmpeg
进行屏幕录制,在 Mac OS X, x11grab
上使用 avfoundation
Linux 和 gdigrab
Windows.
生成的文件应该与现代网络浏览器兼容 (<video/>
),所以我使用 H.264 编解码器并请求 YUV 4:2:0 平面像素格式。
在 Mac OS X 上,但是(不同于 Linux 和 Windows),我收到以下日志记录:
/usr/local/bin/ffmpeg -y -v error -f avfoundation -threads 0 -hide_banner -i 1:none -f mp4 -vcodec h264 -pix_fmt yuv420p -r 25/1 -qscale:v 1 -vf scale=-1:1080 target.mp4
[avfoundation @ 0x7fdba2003a00] Selected pixel format (yuv420p) is not supported by the input device.
[avfoundation @ 0x7fdba2003a00] Supported pixel formats:
[avfoundation @ 0x7fdba2003a00] uyvy422
[avfoundation @ 0x7fdba2003a00] yuyv422
[avfoundation @ 0x7fdba2003a00] nv12
[avfoundation @ 0x7fdba2003a00] 0rgb
[avfoundation @ 0x7fdba2003a00] bgr0
不过,根据mplayer
,生成的 MP4 文件似乎有 YUV 4:2:0 平面颜色模型:
[h264 @ 0x1048a8ac0]Format yuv420p chosen by get_format().
[h264 @ 0x1048a8ac0]Reinit context to 1728x1088, pix_fmt: yuv420p
[h264 @ 0x1048a8ac0]Format yuv420p chosen by get_format().
[h264 @ 0x1048a8ac0]Reinit context to 1728x1088, pix_fmt: yuv420p
[swscaler @ 0x1048c3cc0]bicubic scaler, from yuv420p to yuyv422 using MMXEXT
*** [scale] Exporting mp_image_t, 1728x1080x12bpp YUV planar, 2799360 bytes
*** [vo] Allocating mp_image_t, 1728x1080x16bpp YUV packed, 3732480 bytes
同样被ffmpeg
证实:
$ ffmpeg -i target.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'target.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:04.72, start: 0.000000, bitrate: 201 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1728x1080, 197 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
问题:
- 有人可以解释上面的
ffmpeg
日志记录吗?
- 如果我仍然需要将
avfoundation
视频流转换为 yuv420p
,我该如何即时进行转换(一次 ffmpeg
传递)?
avfoundation 模块的像素格式默认设置为 yuv420p。当不可用时,它将打印该警告并尝试 select 另一种格式。您应该会在该警告下方看到以 Overriding selected pixel format to use ..
开头的一行
如果输出正常,可以忽略。您不需要第二次通过或任何其他更改。
我使用 ffmpeg
进行屏幕录制,在 Mac OS X, x11grab
上使用 avfoundation
Linux 和 gdigrab
Windows.
生成的文件应该与现代网络浏览器兼容 (<video/>
),所以我使用 H.264 编解码器并请求 YUV 4:2:0 平面像素格式。
在 Mac OS X 上,但是(不同于 Linux 和 Windows),我收到以下日志记录:
/usr/local/bin/ffmpeg -y -v error -f avfoundation -threads 0 -hide_banner -i 1:none -f mp4 -vcodec h264 -pix_fmt yuv420p -r 25/1 -qscale:v 1 -vf scale=-1:1080 target.mp4
[avfoundation @ 0x7fdba2003a00] Selected pixel format (yuv420p) is not supported by the input device.
[avfoundation @ 0x7fdba2003a00] Supported pixel formats:
[avfoundation @ 0x7fdba2003a00] uyvy422
[avfoundation @ 0x7fdba2003a00] yuyv422
[avfoundation @ 0x7fdba2003a00] nv12
[avfoundation @ 0x7fdba2003a00] 0rgb
[avfoundation @ 0x7fdba2003a00] bgr0
不过,根据mplayer
,生成的 MP4 文件似乎有 YUV 4:2:0 平面颜色模型:
[h264 @ 0x1048a8ac0]Format yuv420p chosen by get_format().
[h264 @ 0x1048a8ac0]Reinit context to 1728x1088, pix_fmt: yuv420p
[h264 @ 0x1048a8ac0]Format yuv420p chosen by get_format().
[h264 @ 0x1048a8ac0]Reinit context to 1728x1088, pix_fmt: yuv420p
[swscaler @ 0x1048c3cc0]bicubic scaler, from yuv420p to yuyv422 using MMXEXT
*** [scale] Exporting mp_image_t, 1728x1080x12bpp YUV planar, 2799360 bytes
*** [vo] Allocating mp_image_t, 1728x1080x16bpp YUV packed, 3732480 bytes
同样被ffmpeg
证实:
$ ffmpeg -i target.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'target.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:04.72, start: 0.000000, bitrate: 201 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1728x1080, 197 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
问题:
- 有人可以解释上面的
ffmpeg
日志记录吗? - 如果我仍然需要将
avfoundation
视频流转换为yuv420p
,我该如何即时进行转换(一次ffmpeg
传递)?
avfoundation 模块的像素格式默认设置为 yuv420p。当不可用时,它将打印该警告并尝试 select 另一种格式。您应该会在该警告下方看到以 Overriding selected pixel format to use ..
如果输出正常,可以忽略。您不需要第二次通过或任何其他更改。