我正在尝试捕获屏幕视频和两个音频流,一个来自麦克风,另一个来自模拟监视器。
ffmpeg -video_size "$__screen_size__" \
-framerate 50 \
-thread_queue_size 512 -f x11grab -i :0.0+0,0 \
-thread_queue_size 512 -f pulse -i "$__input_mic__" \
-thread_queue_size 512 -f pulse -i "$__output_monitor__" \
-filter_complex amerge \
-ac 2 \
-vcodec libx264rgb -crf 0 -preset:v ultrafast \
-acodec pcm_s16le \
-af aresample=async=1:first_pts=0 \
-async 1 \
-y \
"$__output__"
问题是 ffmpeg 抱怨对一个流同时使用两个过滤器:
Filtergraph 'aresample=async=1:first_pts=0' was specified through the
-vf/-af/-filter option for output stream 0:0, which is fed from a complex filtergraph.
-vf/-af/-filter and -filter_complex cannot be used together for the same stream.
然而,当我不必合并音频流时,下面的脚本(只有一个音频流形成麦克风)工作得很好
ffmpeg -video_size "$__screen_size__" \
-framerate 50 \
-thread_queue_size 512 -f x11grab -i :0.0+0,0 \
-thread_queue_size 512 -f pulse -i "$__input_mic__" \
-vcodec libx264rgb -crf 0 -preset:v ultrafast \
-acodec pcm_s16le \
-af aresample=async=1:first_pts=0 \
-async 1 \
-y \
"$__output__"
基本上删除:
-thread_queue_size 512 -f pulse -i "$__output_monitor__" \
-filter_complex amerge \
-ac 2 \
如果我删除-af aresample=async=1:first_pts=0
并保留上述内容,则音频和视频将不会同步。
基本上我想合并音频流而不引入任何延迟。
答案1
您必须在单个过滤器图中指定所有过滤器。
-filter_complex [1]aresample=async=1:first_pts=0[a];[2]aresample=async=1:first_pts=0[b];[a][b]amerge