这个主题是想验证使用fbdev(Linux framebuffer device),将video直接显示到Linux framebuffer上,在FFmpeg中对应的FFOutputFormat
就是ff_fbdev_muxer
。
const FFOutputFormat ff_fbdev_muxer = {
.p.name = "fbdev",
.p.long_name = NULL_IF_CONFIG_SMALL("Linux framebuffer"),
.priv_data_size = sizeof(FBDevContext),
.p.audio_codec = AV_CODEC_ID_NONE,
.p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = fbdev_write_header,
.write_packet = fbdev_write_packet,
.write_trailer = fbdev_write_trailer,
.get_device_list = fbdev_get_device_list,
.p.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.p.priv_class = &fbdev_class,
};
先看一下怎么用,命令如下,将输入的视频文件 input.mp4
解码后输出到 Framebuffer 设备 /dev/fb0
,命令执行没有问题,但是视频是看不到的,切换到虚拟tty就可以看到。
sudo ffmpeg -v 48 -i input.mp4 -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
-i input.mp4
: 指定输入文件为input.mp4
。-c:v rawvideo
: 指定使用原始视频编码器。-pix_fmt bgra
: 指定像素格式为 BGRA。-f fbdev
: 指定输出格式为 Framebuffer 设备。/dev/fb0
: 指定输出到 Framebuffer 设备的/dev/fb0
。
再来看一下录制framebuffer内容,下面这个命令使用了 FFmpeg 录制 Linux 系统中的framebuffer (/dev/fb0) 的视频,并将其编码为 H.264 格式的 MP4 文件。
sudo ffmpeg -f fbdev -framerate 10 -i /dev/fb0 -vcodec h264 -f mp4 output.mp4
-f fbdev
: 指定输入格式为帧缓冲设备。-framerate 10
: 指定录制视频的帧率为 10 帧每秒。-i /dev/fb0
: 指定输入文件为帧缓冲设备/dev/fb0
。-vcodec h264
: 指定输出视频的编码格式为 H.264。-f mp4
: 指定输出文件格式为 MP4。output.mp4
: 指定输出文件名为 output.mp4。
📣 这两个命令组合起来,可以看到第一个命令input.mp4解码写入到/dev/fb0后,通过第二个命令录制的output.mp4文件就是第一个的input.mp4的内容。或者ctrl+alt+f2
切换到虚拟tty,直接用第一条命令,就可以看到视频和输出log混合在一起在屏幕上显示了。
使用fbgrab截图,可以看到这样的效果。如果系统中没有安装 fbgrab 工具,则需要先进行安装。