ffmpeg(오디오 스트림 2개 + 비디오 스트림 1개) -vf/-af/-filter 및 -filter_complex는 동일한 스트림에 함께 사용할 수 없습니다.

ffmpeg(오디오 스트림 2개 + 비디오 스트림 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

관련 정보