ffmpeg - juntando 2 vídeos para reproduzir um após o outro

2

Estou tentando unir dois arquivos de vídeo - estou guiando os comandos pelo PHP exec (), pois esses vídeos são selecionados pelo usuário. Eu posso fazer com que funcione, pois ele produz um vídeo com o tamanho combinado correto, mas parece que eles estão em trilhas diferentes e apenas toca o primeiro vídeo de entrada.

O comando é

ffmpeg -i temp/production/videos/title.66.avi -i temp/production/videos/66.1391426205.avi \
-filter_complex '[0:0] [1:0] concat=n=2:v=1[v]' -map '[v]' \
temp/production/videos/final.66.1391426205.mp4 2>&1

e a saída é

ffmpeg version 2.1.3 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan 30 2014 14:39:10 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvpx --enable-libmp3lame
  libavutil      52. 48.101 / 52. 48.101
  libavcodec     55. 39.101 / 55. 39.101
  libavformat    55. 19.104 / 55. 19.104
  libavdevice    55.  5.100 / 55.  5.100
  libavfilter     3. 90.100 /  3. 90.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, avi, from 'temp/production/videos/title.66.avi':
  Metadata:
    encoder         : Lavf55.19.104
  Duration: 00:00:05.00, start: 0.000000, bitrate: 36 kb/s
    Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 640x640 [SAR 641:643 DAR 641:643], 25 fps, 25 tbr, 25 tbn, 50 tbc
Input #1, avi, from 'temp/production/videos/66.1391426268.avi':
  Metadata:
    encoder         : Lavf55.19.104
  Duration: 00:00:11.42, start: 0.000000, bitrate: 943 kb/s
    Stream #1:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 640x640 [SAR 1:1 DAR 1:1], 12 tbr, 12 tbn, 12 tbc
[Parsed_concat_0 @ 0x27771e0] Input link in1:v0 parameters (size 640x640, SAR 1:1) do not match the corresponding output link in0:v0 parameters (640x640, SAR 641:643)
[Parsed_concat_0 @ 0x27771e0] Failed to configure output pad on Parsed_concat_0
    
por Josh P 31.01.2014 / 16:54

1 resposta

2

O erro é causado pelos dois fluxos de vídeo que não compartilham as mesmas dimensões - ou proporção de pixel, para ser preciso. O primeiro define um SAR (sample = pixel) de 641/643, portanto não é um quadrado perfeito.

O ffmpeg não pode trazer automaticamente as duas dimensões para as mesmas dimensões, pois não é possível adivinhar qual delas você deseja reduzir ou aumentar, ou cuja proporção precisa ser alterada.

Você pode tentar a proporção da configuração forçada:

ffmpeg -i temp/production/videos/title.66.avi -i temp/production/videos/66.1391426205.avi \
-filter_complex '[0:0] setsar=sar=1 [in1]; [1:0] setsar=sar=1 [in2]; [in1][in2] concat [v]' -map '[v]' \
temp/production/videos/final.66.1391426205.mp4 2>&1

Em vez de fazer isso, pode fazer sentido trazer os dois vídeos para as mesmas dimensões antes, usando o filtro scale . Para fazer isso, basta substituir setsar=sar=1 por scale=640:640 ou qualquer que seja o tamanho fixo da saída necessária.

Se você quiser que o áudio seja copiado e concatenado, adicione um segundo filtro concat :

ffmpeg -i temp/production/videos/title.66.avi -i temp/production/videos/66.1391426205.avi \
-filter_complex '[0:v] setsar=sar=1 [in1]; [1:v] setsar=sar=1 [in2]; [in1][in2] concat [v]; [0:a][1:a] concat=v=0:a=1 [a]' -map '[v]' -map '[a]' \
temp/production/videos/final.66.1391426205.mp4 2>&1

Se você tem dois vídeos que gostaria de inserir em um player de tamanho específico, use este filtro: Redimensionando vídeos com ffmpeg / avconv para caber em player de tamanho estático

    
por 03.02.2014 / 20:30

Tags