1

我正在使用 FFmpeg-python 绑定来使用 FFmpeg。我必须从 x11grab 获取输入,为此我已经在 shell 中有一个等效的命令,即,

ffmpeg -nostdin -hide_banner -nostats -loglevel panic -video_size 1920x1080 -r 60 -framerate 30 -f x11grab -i :1 -f alsa -ac 2 -i pulse -preset fast -pix_fmt yuv420p file.mkv &

我已经浏览了 FFmpeg-Python 的文档来创建等效命令,但是,我在文档中找不到任何 x11grab 示例。

我想使用绑定使代码更具可读性,该命令适用于 subprocess.call() / os.system()

4

1 回答 1

1

语法类似于以下代码示例:

import ffmpeg

(
    ffmpeg
    .output(ffmpeg.input(':0', s='192x128', r=30, f='x11grab'),
            ffmpeg.input('sine=frequency=500', f='lavfi'),
            'file.mkv',
            vcodec='libx264', acodec='aac', preset='fast', pix_fmt='yuv420p', t=5)
    .global_args('-nostdin', '-hide_banner', '-nostats')
    .overwrite_output()
    .run()
)

笔记:

  • 我的 Ubuntu 18.04 虚拟机不接受 1920x1080 分辨率,也不接受音频输入设备(我将其替换为合成音频)。
  • 您可能可以替换ffmpeg.input('sine=frequency=500', f='lavfi')为:
    ffmpeg.input('pulse', f='alsa', ac=2),但我无法测试它......
  • 该示例选择视频和音频编解码器:(vcodec='libx264', acodec='aac'选择编解码器是一个很好的做法)。
  • 该示例t=5仅用于记录 5 秒。
  • .overwrite_output()用于在不询问的情况下覆盖输出。

抓取样本:

在此处输入图像描述

于 2021-11-28T20:07:43.190 回答