Como mesclar três ou mais arquivos de áudio / vídeo no ffmpeg com Picture in Picture

0

Estou tentando criar um único arquivo de vídeo com vários Picture in Picture (PIP). Consegui tirar duas fotos em fotos trabalhando. Agora estou tentando adicionar uma quarta entrada.

O que eu espero que pareça:

Minhastentativasdecomando:

ffmpeg-i444_remote_0.webm-i444_remote_1.webm-i444_remote_2.webm\-i444_local_0.webm-filter_complex\"[1:v]scale=iw/4:-1:flags=lanczos[rem1]; \
        [2:v]scale=iw/4:-1:flags=lanczos[rem2]; \
        [3:v]scale=iw/4:-1:flags=lanczos[loc0]; \
        [0:v][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg]; \
        [bg][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v]; \
        [bg][rem2]overlay=main_w-overlay_w-360:main_h-overlay_h-10[v]; \
        [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
       -map "[v]" -map "[a]" -ac 2 -ar 44100 -vcodec libx264 -acodec aac 444.mp4

Estou recebendo um novo erro: Invalid stream specifier: bg.

Saída do Console:

ffmpeg -i 444_remote_0.webm -i 444_remote_1.webm -i 444_remote_2.webm -i 444_local_0.webm -filter_complex "[1:v]scale=iw/4:-1:flags=lanczos[rem1]; [2:v]scale=iw/4:-1:flags=lanczos[rem2]; [3:v]scale=iw/4:-1:flags=lanczos[loc0]; [0:v][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg]; [bg][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v]; [bg][rem2]overlay=main_w-overlay_w-360:main_h-overlay_h-10[v]; [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" -map "[v]" -map "[a]" -ac 2 -ar 44100 -vcodec libx264 -acodec aac 444.mp4
ffmpeg version N-80901-gfebc862 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, matroska,webm, from '444_remote_0.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #0:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Input #1, matroska,webm, from '444_remote_1.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #1:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #1:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Input #2, matroska,webm, from '444_remote_2.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #2:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #2:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Input #3, matroska,webm, from '444_local_0.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #3:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #3:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
[matroska,webm @ 0x35f5c40] Invalid stream specifier: bg.
    Last message repeated 1 times
Stream specifier 'bg' in filtergraph description [1:v]scale=iw/4:-1:flags=lanczos[rem1]; [2:v]scale=iw/4:-1:flags=lanczos[rem2]; [3:v]scale=iw/4:-1:flags=lanczos[loc0]; [0:v][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg]; [bg][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v]; [bg][rem2]overlay=main_w-overlay_w-360:main_h-overlay_h-10[v]; [0:a][1:a][2:a][3:a]amerge=inputs=4[a] matches no streams.
    
por Daryl 04.10.2016 / 23:28

1 resposta

2

Opção de veiculação 1: pendurado à direita

Como sua maquete, onde o pip é pesado à direita:

ffmpeg-iblue.webm-igreen.webm-ired.webm-iorange.webm-filter_complex\"[1:v]scale=iw/4:-1:flags=lanczos[pip1]; \
 [2:v]scale=iw/4:-1:flags=lanczos[pip2]; \
 [3:v]scale=iw/4:-1:flags=lanczos[pip3]; \
 [0:v][pip1]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg1]; \
 [bg1][pip2]overlay=main_w-overlay_w*2-20:main_h-overlay_h-10[bg2]; \
 [bg2][pip3]overlay=main_w-overlay_w*3-30:main_h-overlay_h-10,format=yuv420p[v]; \
 [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
-map "[v]" -map "[a]" -ac 1 output.mp4

Opção de veiculação 2: centralizada

ffmpeg-iblue.webm-igreen.webm-ired.webm-iorange.webm-filter_complex\"[1:v]scale=iw/4:-1:flags=lanczos[pip1]; \
 [2:v]scale=iw/4:-1:flags=lanczos[pip2]; \
 [3:v]scale=iw/4:-1:flags=lanczos[pip3]; \
 [0:v][pip1]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg1]; \
 [bg1][pip2]overlay=(main_w-overlay_w)/2:main_h-overlay_h-10[bg2]; \
 [bg2][pip3]overlay=10:main_h-overlay_h-10,format=yuv420p[v]; \
 [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
-map "[v]" -map "[a]" -ac 1 output.mp4

Notas

  • Lanczos algoritmo de escala provavelmente diminuirá melhor do que o padrão.

  • O número padrão de entradas para o amerge é 2, mas é melhor usar sempre o inputs opção para evitar o problema que você enfrentou.

  • Use um nome exclusivo para cada rótulo de saída no filtro de filtros.

  • Se suas entradas não tiverem as mesmas durações, consulte as opções sobreposição eof_action , shortest , etc, para dizer como deve lidar com qualquer discrepância de duração.

  • Você pode usar pan e omitir -ac para ter um controle mais preciso sobre o layout de redução de resolução .

por 05.10.2016 / 01:32