Как точно наложить время на несколько видео потоков одновременно, используя FFMPEG

0

Я использую 9 камер, чтобы записать музыкальный спектакль и точно вырезать фрагмент музыки из каждой камеры. Когда я пытаюсь выложить их в формате 3x3 с помощью ffmpeg, синхронизация видео может быть на одну секунду меньше друг от друга. Объединение их с коммерческим продуктом с графическим интерфейсом работает нормально, но я хотел бы использовать процедуру командной строки с ffmpeg. Вот команда, которую я использую:

ffmpeg -i piece13cam1.m2t -i piece13cam2.m2t -i piece13cam3.m2t -i piece13cam4.m2t -i piece13cam5.m2t -i piece13cam6.m2t -i piece13cam7.m2t -i piece13cam8.m2t -i piece13cam9.m2t -filter_complex "[0:v]scale=640:-1[a];[1:v]scale=640:-1[b];[2:v]scale=640:-1[c];[3:v]scale=640:-1[d];[4:v]scale=640:-1[e];[5:v]scale=640:-1[f];[6:v]scale=640:-1[g];[7:v]scale=640:-1[h];[8:v]scale=640:-1[i]; [0:v][a] overlay=0:0 [xb]; [xb][b] overlay=640:0 [xc];[xc][c] overlay=1280:0 [xd]; [xd][d] overlay=0:360 [xe];[xe][e] overlay=640:360 [xf];[xf][f] overlay=1280:360 [xg];[xg][g] overlay=0:720 [xh];[xh][h] overlay=640:720 [xi];[xi][i] overlay=1280:720" piece13composite.m2t 

Вот вывод времени выполнения:

    ffmpeg version N-82597-gd316b21 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.4.0 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib        libavutil      55. 40.100 / 55. 40.100
  libavcodec     57. 66.106 / 57. 66.106
  libavformat    57. 58.100 / 57. 58.100
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 67.100 /  6. 67.100
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
Input #0, mpegts, from 'piece13cam1.m2t':
  Duration: 00:04:00.15, start: 1.400000, bitrate: 3984 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #0:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #1, mpegts, from 'piece13cam2.m2t':
  Duration: 00:04:00.15, start: 1.400000, bitrate: 4033 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #1:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #1:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #2, mpegts, from 'piece13cam3.m2t':
  Duration: 00:04:00.17, start: 1.400000, bitrate: 4069 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #2:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #2:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #3, mpegts, from 'piece13cam4.m2t':
  Duration: 00:04:00.13, start: 1.400000, bitrate: 3906 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #3:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #3:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #4, mpegts, from 'piece13cam5.m2t':
  Duration: 00:04:00.10, start: 1.400000, bitrate: 4409 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #4:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #4:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #5, mpegts, from 'piece13cam6.m2t':
  Duration: 00:04:00.17, start: 1.400000, bitrate: 3357 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #5:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #5:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #6, mpegts, from 'piece13cam7.m2t':
  Duration: 00:04:00.15, start: 1.400000, bitrate: 3623 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #6:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #6:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #7, mpegts, from 'piece13cam8.m2t':
  Duration: 00:04:00.17, start: 1.400000, bitrate: 3422 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #7:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #7:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
Input #8, mpegts, from 'piece13cam9.m2t':
  Duration: 00:04:00.20, start: 1.400000, bitrate: 3693 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #8:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #8:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
File 'piece13composite.m2t' already exists. Overwrite ? [y/N] Output #0, mpegts, to 'piece13composite.m2t':
  Metadata:
    encoder         : Lavf57.58.100
    Stream #0:0: Video: mpeg2video (Main), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 59.94 fps, 90k tbn, 59.94 tbc (default)
    Metadata:
      encoder         : Lavc57.66.106 mpeg2video
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: mp2, 48000 Hz, stereo, s16, 384 kb/s
    Metadata:
      encoder         : Lavc57.66.106 mp2
Stream mapping:
  Stream #0:0 (mpeg2video) -> scale (graph 0)
  Stream #0:0 (mpeg2video) -> overlay:main (graph 0)
  Stream #1:0 (mpeg2video) -> scale (graph 0)
  Stream #2:0 (mpeg2video) -> scale (graph 0)
  Stream #3:0 (mpeg2video) -> scale (graph 0)
  Stream #4:0 (mpeg2video) -> scale (graph 0)
  Stream #5:0 (mpeg2video) -> scale (graph 0)
  Stream #6:0 (mpeg2video) -> scale (graph 0)
  Stream #7:0 (mpeg2video) -> scale (graph 0)
  Stream #8:0 (mpeg2video) -> scale (graph 0)
  overlay (graph 0) -> Stream #0:0 (mpeg2video)
  Stream #0:1 -> #0:1 (mp2 (native) -> mp2 (native))
Press [q] to stop, [?] for help
frame=    9 fps=0.0 q=14.7 size=     464kB time=00:00:00.39 bitrate=9557.4kbits/s speed=0.793x

.....

frame=14379 fps= 37 q=31.0 Lsize=  132985kB time=00:04:00.13 bitrate=4536.7kbits/s speed=0.613x    
video:109909kB audio:11257kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9.754501%

Что я должен сделать по-другому, чтобы синхронизировать все 9 видео друг с другом? Благодарю.

Viktor
источник
Я просто попытался сделать это с 9 одинаковыми видео. Верхнее левое (первое) видео не синхронизировано со всеми остальными. 2 - 9 визуально синхронизированы друг с другом. Звук синхронизируется только с первым.
Viktor
попробуйте добавить фильтр setpts=PTS-STARTPTS к каждому видео и аудио потоку
ptQa
Я решил проблему, перекодировав все входные видео с помощью: ffmpeg.exe -i videoin.mpg -ss & lt; starttime & gt; -t & lt; length & gt; -vcodec libx264 -x264-params -o recoded.m2t
Viktor