• ubuntu上ffmpeg使用framebuffer显示video


    这个主题是想验证使用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,
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    先看一下怎么用,命令如下,将输入的视频文件 input.mp4 解码后输出到 Framebuffer 设备 /dev/fb0命令执行没有问题,但是视频是看不到的,切换到虚拟tty就可以看到。

    sudo ffmpeg -v 48 -i input.mp4 -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
    
    • 1
    • -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
    
    • 1
    • -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 工具,则需要先进行安装。

  • 相关阅读:
    【C++从0到王者】第三十三站:AVL树
    文件相关工具类
    为什么我的remix没有injected web3
    Unity Metaverse(五)、Avatar数字人换装系统的实现方案
    校招太难,项目太烂?项目课程模式和在线实习模式来啦!校招项目轻松搞定!
    react&antd问题(4)
    小程序 | 实现本地生活的首页基础布局
    MSP430F149用模拟SPI和FM25CL640通信
    Playwright直接控制本地Chrome浏览器的方法
    时间复杂度计算超全整理!!(数据结构和算法的第一步
  • 原文地址:https://blog.csdn.net/hongszh/article/details/132414177