刚刚接触 ffmpeg ,不太熟悉。 最近在使用 ffmpeg-cli 方式录制 winows 系统的屏幕录制,gdigrap 视频+dshow 音频方式。 发现话筒声音与视频不同步(但视频与系统音源是同步的),话筒声音滞后 300-500ms 左右。 该如何 fix 呢? 劳烦大佬来解答一下。
大家一起讨论讨论,视频处理这块算是比较有技术含量的,个人感觉也是比较有趣可以深做的方向。
1
tpxcer 2022-07-19 10:15:08 +08:00
我想请教下,有 OBS 这种为什么还要用命令行呢? 画质更好?
|
2
documentzhangx66 2022-07-19 10:33:56 +08:00
1.音画不同步是正常的,同步了才是稀罕事。
2.专业的处理方法是,录制时,视频流与音频流分开,最后合并时,让用户自己确定时差,最后带上时差来合并视频流与音频流。 |
4
Yeen OP @documentzhangx66 请教有没有 ffmepg cli 的命令样例,感谢!
|
5
wy315700 2022-07-19 10:47:50 +08:00
像影视公司那样,弄个场面版,开始的时候咔一下。后期剪辑的时候就很方便对准了
|
6
Vaspike 2022-07-19 10:49:04 +08:00
|
8
ysc3839 2022-07-19 11:38:21 +08:00 via Android 2
建议直接用 OBS 。
如果是要集成到自己软件里的话,用 gstreamer 的 d3d11screencapturesrc 和 wasapi2src 来录音视频。GDI 和 DirectShow 是过时的 API 了,性能很差。 |
12
Yeen OP 经过测试,发现是 amix 后,只要混入话筒,就会音画不同步。如果只有声卡,没有用 amix 混合,就不存在这个问题。感觉应该可以通过设置 ffmpeg cli 的参数解决。如果能先简单解决最好了~
在线等 |
13
Yeen OP @documentzhangx66 能不能通过一条 ffmpeg 的命令行就实现这个过程呢?请教
|
14
cwaken 2022-07-19 18:52:58 +08:00 via iPhone
同步是一件很复杂的事
|
15
cwaken 2022-07-19 18:53:29 +08:00 via iPhone
音频和视频的帧率不一样
|
18
cwaken 2022-07-19 19:04:50 +08:00 via iPhone
你要是用命令,建议走 obs
|
19
Yeen OP 通过调整 ffmepg cli 的命令参数没有办法吗...
|
20
cwaken 2022-07-19 19:15:12 +08:00 via iPhone
音视频同步反而是在解码端实现的,但视频音频的 pts 都要对齐
|
21
Salticey 2022-07-19 19:17:05 +08:00 via Android
如果是 windows 且用独立显卡的话,可以直接使用独显自带的录屏呀,很好用的
|
22
cssk 2022-07-19 19:21:48 +08:00 via iPhone
@ysc3839 #8 搭车一问,directshow 过时了,那么写个 uvc 摄像头的软件用什么比较好,amcap 是用 directshow 的
|
24
Yeen OP 说实话,webrtc 除了编码格式较少不能输出 mp4 ,控制参数不灵活。其他方面倒还蛮好的
|
25
ysc3839 2022-07-19 20:53:11 +08:00 via Android
@cssk Media Foundation 。但是很多虚拟摄像头还是用 DirectShow 实现的,换成 MF 之后用不了。所以选啥自己考虑吧。
|
26
610915518 2022-07-19 21:25:40 +08:00
OBS 大法好
|
27
cwaken 2022-07-20 00:29:16 +08:00 via iPhone
每个 pcm 数据 yuv 数据的 pts 值都是通过公式计算得来的
|
28
cwaken 2022-07-20 00:32:15 +08:00 via iPhone
我以前还有个同事为了高性能录制,写了个声卡虚拟驱动,为的就是录制时降噪和回音抑制
|
29
cwaken 2022-07-20 00:35:04 +08:00 via iPhone
我是没这么做,我在另一个项目里是先从声卡数据采集,因为人不可能一直在说,所以先把数据和 pts 放到生产者队列。然后取出来再走音频算法,把 pts 设置上去,播放的时候也是同步的
|
30
cwaken 2022-07-20 00:35:36 +08:00 via iPhone
没有人声的时候就把累积的全部处理
|
31
cwaken 2022-07-20 00:38:58 +08:00 via iPhone
cli 基本没什么用,在商业项目中情况复杂,兼容不了特殊情况
|
34
Yeen OP @cwaken 新进展:在混入麦克风时候,给视频流加了 0.4 秒的 offset 延迟,那么声卡,视频,话筒,就就能同步了。我感觉这个问题应该还不是复杂的同步问题。因为是保存本地文件,不是实时推流那么复杂的吧?
|
35
documentzhangx66 2022-07-21 15:38:03 +08:00 1
@Yeen
1.不能一条命令解决,我在前面说了,需要专业人士来分析出具体延迟时间,然后在合并时进行处理。 2.这里的关键是,需要分析出延迟到底是多少。不同电脑,在不同负载下,延迟时间可能会不一样。甚至在录制过程中,延迟时间还有可能会发生变化。 |
36
Yeen OP @documentzhangx66 查阅了一下资料,应该是麦克风输入缓存延迟的问题。暂时解决了,感谢回复~
|