FFMpeg não pode concatenar vídeos: O link de entrada nos parâmetros 31: v0 (tamanho 1280x720, SAR 0: 1) não corresponde ao link de saída correspondente nos parâmetros 0: v0

0

Estou usando o fluent-ffmpeg para o NodeJS para combinar muitos (50) vídeos. O comando fluent-ffmpeg gera é:

ffmpeg -i ./temp/1426738868618B778176A-254A-47E5-80D4-AF9E2DB836C6.mp4 -i 
./temp/14267388686185827E1A1-20CC-41A7-B121-4BE088580062.mp4 -i 
./temp/142673886861811F5BEB8-6567-4771-9F73-E13D47CE6773.mp4 -i
./temp/1426738868618C72B0345-739B-4243-B739-3BEF718EDE35.mp4 -i
./temp/1426738868618F37E694A-7433-4FB5-A977-0CF28913EDF8.mp4 -i
...
./temp/142673886861869535AA6-7A08-4447-9747-A40A28C4D57C.mp4 -i
./temp/1426738868618AAD398BC-3259-4087-9535-26D73EA5209F.mp4 -i
./temp/1426738868618193CF9E5-B0FB-4B60-B273-22614C376185.mp4 -i
./temp/142673886861875ABFC64-D0BA-429F-A53E-2088F90DD6E4.mp4 
-i./temp/142673886861841290364-42E0-4159-9A75-70528B8D471E.mp4 
-y -filter_complex concat=n=50:v=1:a=1 -r 29.97 -vcodec libx264 -s 568x320 -flags +loop 
-b 400k -bufsize 4M -bt 256k -refs 1 -coder 0 -me_range 16 -subq 4 
-partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 
-level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 
-i_qfactor 0.71 -acodec aac -strict experimental -ab 80k -ar 48000 -ac 2 
-strict experimental -f mp4 -metadata:s:v:0 rotate=90 ./temp/1426738868618.mp4

No entanto, estou recebendo o erro:

[Parsed_concat_0 @ 0x7faba20366a0] Input link in31:v0 parameters (size 1280x720, SAR 0:1) do not match the corresponding output link in0:v0 parameters (360x480, SAR 0:1)
[Parsed_concat_0 @ 0x7faba20366a0] Failed to configure output pad on Parsed_concat_0

Eu pesquisei e tenho que fazer algo como "setsar=1" , mas quando adiciono isso em filter_complex , recebo exatamente o mesmo erro.

edit: aqui está a saída completa para o comando link

    
por Macmee 19.03.2015 / 05:56

1 resposta

0

Tamanhos de quadros

A partir da documentação do filtro de concatenação :

All corresponding streams must have the same parameters in all segments; the filtering system will automatically select a common pixel format for video streams, and a common sample format, sample rate and channel layout for audio streams, but other settings, such as resolution, must be converted explicitly by the user.

Different frame rates are acceptable but will result in variable frame rate at output; be sure to configure the output file to handle it.

Suas entradas variam em tamanho de quadro, portanto, você deve usar o filtro de escala para criar um tamanho de quadro comum .

Timestamps

Também da mesma documentação:

For this filter to work correctly, all segments must start at timestamp 0.

Use o filtro setpts para fazer isso.

Exemplo

Um exemplo de filtragem parcial pode ser assim:

[0:v]scale=360x480,setpts=PTS-STARTPTS[v0];
[1:v]scale=360x480,setpts=PTS-STARTPTS[v1];
…
[49:v]scale=360x480,setpts=PTS-STARTPTS[v49];
[v0][0:a][v1][1:a]…[v49][49:a]concat=n=50:v=1:a=1

Use as predefinições

Faça um favor e use as predefinições de codificação. Não há motivo para declarar tantas opções. Os presets vão lidar com eles. É para isso que eles são.

Você pode remover:

-flags +loop -bt 256k -refs 1 -coder 0 -me_range 16 -subq 4 
-partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 
-level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 
-i_qfactor 0.71

E substitua essas opções por -preset faster ou qualquer predefinição que você preferir. Veja FFmpeg Wiki: Guia de codificação de vídeo H.264 para mais informações.

    
por 21.03.2015 / 07:02