如何使用 ffmpeg 对多个输出视频进行一次音频编码

Suu*_*hgi 0 ffmpeg video-encoding

我想创建几个具有不同分辨率但相同音频的输出视频。Afaik 音频编码是一个输出选项。

ffmpeg \
  -hwaccel qsv -c:v h264_qsv \
  -i <input> \
  -filter_complex '[0:a]aformat=channel_layouts=stereo,aresample=async=1,asplit=3[a1][a2][a3];[0:v]vpp_qsv=detail=50:framerate=25,split=3[v1][v2][v3];[v2]vpp_qsv=width=1280[v2o];[v3]vpp_qsv=width=800[v3o]' \
  -c:v h264_qsv -c:a aac -b:a 96k -map '[v1]'  -map '[a1]' <output> \
  -c:v h264_qsv -c:a aac -b:a 96k -map '[v2o]' -map '[a2]' <output> \
  -c:v h264_qsv -c:a aac -b:a 96k -map '[v3o]' -map '[a3]' <output>
Run Code Online (Sandbox Code Playgroud)

上面我有两个冗余的音频编码。

如何对音频进行一次编码并将其复制到不同的输出?

llo*_*gan 6

使用Tee 复用器

ffmpeg \
  -hwaccel qsv -c:v h264_qsv -i <input> \
  -filter_complex '[0:a]aformat=channel_layouts=stereo,aresample=async=1[a];[0:v]vpp_qsv=detail=50:framerate=25,split=3[v1][v2][v3];[v2]vpp_qsv=width=1280[v2o];[v3]vpp_qsv=width=800[v3o]' \
  -map '[v1]' -map '[v2o]' -map '[v3o]' -map '[a]' \
  -c:v h264_qsv -c:a aac -b:a 96k -f tee -flags +global_header \
  "[select=\'v:0,a\']output.mkv|[select=\'v:1,a\':f=flv:onfail=ignore]rtmp://server0/app/instance/playpath|[select=\'v:2,a\':movflags=+faststart]output.mp4"
Run Code Online (Sandbox Code Playgroud)