Я использую fluent-ffmpeg для NodeJS, чтобы объединить много (50) видео. Команда fluent-ffmpeg создает:

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

Однако я получаю ошибку:

[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

Я исследовал это, и я должен сделать что-то вроде "setsar=1" но когда я добавляю это в filter_complex я получаю точно такую же ошибку.

редактировать: вот полный вывод для команды http://pastebin.com/Sk2y3WQr

1 ответ1

0

Размеры рамы

Из документации фильтра concat:

Все соответствующие потоки должны иметь одинаковые параметры во всех сегментах; система фильтрации автоматически выберет общий формат пикселей для видеопотоков, а также общий формат выборки, частоту дискретизации и разметку канала для аудиопотоков, но другие параметры, такие как разрешение, должны быть явно преобразованы пользователем.

Разные частоты кадров приемлемы, но приводят к переменной частоте кадров на выходе; Обязательно настройте выходной файл для его обработки.

Ваши входные данные различаются по размеру кадра, поэтому вы должны использовать масштабный фильтр для создания общего размера кадра.

Timestamps

Также из тех же документов:

Для правильной работы этого фильтра все сегменты должны начинаться с отметки времени 0.

Используйте фильтр setpts, чтобы сделать это.

пример

Пример частичной фильтрации может выглядеть так:

[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

Используйте пресеты

Сделайте себе одолжение и используйте пресеты кодирования. Нет причин объявлять так много вариантов. Предустановки будут иметь дело с ними. Вот для чего они.

Вы можете удалить:

-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

И замените эти опции на -preset faster или на любой другой пресет, который вы предпочитаете. См. FFmpeg Wiki: Руководство по кодированию видео H.264 для получения дополнительной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .