2

Я пытаюсь соединить два видеофайла вместе - я передаю команды через PHP exec(), так как эти видео выбираются пользователем. Я могу заставить его работать, так как он выводит видео правильного объединенного размера, но кажется, что они на самом деле установлены на разных дорожках, и он просто воспроизводит первое входное видео.

Команда

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

и вывод

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

1 ответ1

2

Ошибка вызвана тем, что два видеопотока не имеют одинаковые размеры или пропорции пикселя, если быть точным. Первый определяет SAR (образец = пиксель) 641/643, поэтому это не идеальный квадрат.

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

Вы можете попробовать принудительно установить соотношение сторон:

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

Вместо этого может иметь смысл привести оба видео к одинаковым размерам ранее, используя фильтр scale . Для этого вам нужно просто заменить setsar=sar=1 на scale=640:640 или любой другой фиксированный размер необходимого вывода.

Если вы хотите, чтобы аудио было скопировано и конкатенировано, добавьте второй фильтр 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

Если у вас есть два видео, которые вы хотите разместить в плеере определенного размера, вы можете использовать этот фильтр: Изменение размера видео с помощью ffmpeg/avconv для размещения в плеере статического размера

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