ffmpeg(两个音频流 + 1 个视频流) -vf/-af/-filter 和 -filter_complex 不能对同一流一起使用

ffmpeg(两个音频流 + 1 个视频流) -vf/-af/-filter 和 -filter_complex 不能对同一流一起使用

我正在尝试捕获屏幕视频和两个音频流,一个来自麦克风,另一个来自模拟监视器。

    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

相关内容