ffmpeg-python 从 x11grab 获取输入
ffmpeg-python take input from x11grab
我正在使用 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()
语法类似于以下代码示例:
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()
用于不询问就覆盖输出。
抓取样本:
我正在使用 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()
语法类似于以下代码示例:
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()
用于不询问就覆盖输出。
抓取样本: