0

I have two input sources, each video+audio. I used clapping and superimposed audio frequencies of each to determine that the first leads by x=1.555s. I want to create an output made of the synchronized video and audio of the first and second inputs, respectively.

For trial's sake, I ignored the offset, and tried different variants of the code below, based on a similar post. I can tell the audio is from the first source because the picture and the sound are in sync.

Evidently, I misinterpreted what the code is doing. Could someone clarify and make a suggestion to achieve the stated goal?

$ ffmpeg -i ipad.MOV -i laptop.webm -vcodec copy -acodec copy muxed.MP4
ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ipad.MOV':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2019-05-06T19:22:15.000000Z
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPad mini 4
    com.apple.quicktime.software: 12.1
    com.apple.quicktime.creationdate: 2019-05-06T15:22:15-0400
  Duration: 00:00:15.19, start: 0.000000, bitrate: 8385 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 8279 kb/s, 30.02 fps, 30 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2019-05-06T19:22:15.000000Z
      handler_name    : Core Media Data Handler
      encoder         : H.264
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 93 kb/s (default)
    Metadata:
      creation_time   : 2019-05-06T19:22:15.000000Z
      handler_name    : Core Media Data Handler
    Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2019-05-06T19:22:15.000000Z
      handler_name    : Core Media Data Handler
    Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2019-05-06T19:22:15.000000Z
      handler_name    : Core Media Data Handler
Input #1, matroska,webm, from 'laptop.webm':
  Metadata:
    encoder         : GStreamer matroskamux version 1.14.1
    creation_time   : 2019-05-06T19:22:16.000000Z
  Duration: 00:00:15.90, start: 0.000000, bitrate: 1106 kb/s
    Stream #1:0(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      title           : Video
    Stream #1:1(eng): Audio: vorbis, 44100 Hz, mono, fltp (default)
    Metadata:
      title           : Audio
Output #0, mp4, to 'muxed.MP4':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    com.apple.quicktime.creationdate: 2019-05-06T15:22:15-0400
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPad mini 4
    com.apple.quicktime.software: 12.1
    encoder         : Lavf57.83.100
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, q=2-31, 8279 kb/s, 30.02 fps, 30 tbr, 19200 tbn, 600 tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2019-05-06T19:22:15.000000Z
      handler_name    : Core Media Data Handler
      encoder         : H.264
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 93 kb/s (default)
    Metadata:
      creation_time   : 2019-05-06T19:22:15.000000Z
      handler_name    : Core Media Data Handler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  456 fps=0.0 q=-1.0 Lsize=   15539kB time=00:00:15.18 bitrate=8382.5kbits/s speed=32.6x    
video:15350kB audio:175kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.091235%

Other variant:

$ ffmpeg -i ipad.MOV -i laptop.webm -c:v copy -c:a copy muxed.MP4

superimposed audio frequencies

Erwann
  • 141

1 Answers1

0

FFmpeg has the -map option to expressly denote which streams are used for an output. In the absence of -map, ffmpeg has an automatic stream selection algorithm, which may not pick the streams you intended.

Use -map to pick streams for output:

ffmpeg -i ipad.MOV -itsoffset 1.555 -i laptop.webm -map 0:v -map 1:a -c copy muxed.MP4

See http://ffmpeg.org/ffmpeg.html#Stream-selection

The itsoffset delays the 2nd input by 1.555 seconds. Note that your player must support edit lists in MP4 for the delay to be effected. Most modern players do.

Gyan
  • 38,955