ffmpeg - ffmpeg中thread_queue_size的正确使用
问题描述
我正在做一个截屏视频,我正在录制屏幕上发生的事情以及来自外部 USB 麦克风的同步音频评论。我正在使用以下命令:
ffmpeg -f x11grab -r 25 -s 1280x720 -i :0.0+320,236 -thread_queue_size 1024 -f alsa -thread_queue_size 1024 -i hw:1 -vcodec huffyuv screencast.mkv
我认为使用如此高的值thread_queue_size
应该让我进入安全站点,以避免buffer xrun
我之前遇到的任何错误。然而,情况似乎并非如此。这是录制过程中出现的警告消息:
[x11grab @ 0x55ffe44e6a40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[alsa @ 0x55ffe44efe80] Thread message queue blocking; consider raising the thread_queue_size option (current value: 1024)
[alsa @ 0x55ffe44efe80] ALSA buffer xrun.B time=00:07:35.96 bitrate=203382.4kbits/s speed=0.994x
[alsa @ 0x55ffe44efe80] ALSA buffer xrun.B time=00:20:18.76 bitrate=210805.7kbits/s speed=0.998x
我不明白的两件事:
- 为什么
x11grab
说thread_queue_size
is8
,而我将其设置为1024
? - 仍然是一个
ALSA buffer xrun
错误/警告,尽管thread_queue_size
of1024
,我可以在这里放什么值 - 最大值是多少,该值到底是什么意思?
任何意见将不胜感激!
版本:
ffmpeg version 3.4.6-0ubuntu0.18.04.1
Kernel 4.15.0-99-generic
xubuntu 18.04.4 LTS x86_64
.
解决方案
两个问题,两个答案:
正如@Gyan在评论中所说,
thread_queue_size
应用于它之后指定的第一个输入。这意味着对于我ffmpeg
在问题中给出的命令:ffmpeg -f x11grab -thread_queue_size 1024 -r 25 -s 1280x720 -i :0.0+320,236 -f alsa -thread_queue_size 1024 -i hw:1 -vcodec huffyuv screencast.mkv
这里的问题似乎是我保存了一个未压缩的视频文件——这些文件会很快变得非常大。我的磁盘似乎无法跟上按时将所有内容写入它的速度。因此,我更改了录制以保存压缩视频,这对 CPU 提出了更多要求,大大减少了文件大小。我记录屏幕截图的新命令(不会产生任何结果
buffer xrun
:$ ffmpeg -f x11grab -thread_queue_size 4096 -r 25 -s 1280x720 -i :0.0+320,236 -f alsa -thread_queue_size 4096 -i hw:1 -vcodec libx264 -pix_fmt yuv420p -threads 0 -acodec aac screencast.mp4
推荐阅读
- windows - 使用 Vboxmanage guestcontrol 执行应用程序不会显示在来宾上
- amazon-web-services - 在 Terraform 中使用 AWS 的完全私有证书?
- swift - SwiftUI - 调整 ScrollView 滚动指示器插图
- r - 如何将分隔符调整为多个空格而不是单个空格以将数据帧读入 r?
- java - Apache Axis 找不到 WSDL2Java 类
- vb.net - 如果类中的目标已初始化,newtonsoft json 将有效日期时间反序列化为可为空的 datetimeoffset 不同的行为
- javascript - 如何将事件侦听器添加到模板字符串
- javascript - JSF 页面支持 bean 荒谬的延迟
- reactjs - React电话号码输入导致cypress上的webpack错误
- php - 如何改进正则表达式?