[FFmpeg-user] help with live capture and audio sync issues

Ricardo Kleemann ricardo at americasnet.com
Fri Sep 4 05:12:04 CEST 2015


Hi,

I have very inconsistent results with doing live capture. Sometimes the resulting file has perfect audio sync, but sometimes it doesn’t. I’ve tried different combinations but the results are never consistent.

I am capturing video from a black magic design UltraStudio Mini Recorder and the audio from an external Mic.

This is done on a MacBook Pro.

Here’s the capture command:

ffmpeg -y \
	-thread_queue_size 2048 -f avfoundation -async 1 -i none:'C-Media USB Audio Device' \
	-thread_queue_size 2048 -f decklink -vsync 0 -i 'UltraStudio Mini Recorder at 12':none\
	-c:v libx264 -preset veryfast -profile:v baseline -vf scale=640:360 \
	-pix_fmt yuv420p \
	-c:a libfdk_aac -b:a 80k \
	-map 1:1 -map 0:0 \
	video_tests/test-avsync.mp4


Here’s the ffmpeg output:

ffmpeg version N-73104-g7604358 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-decklink --extra-cflags=-I/Users/ptl/blackmagicsdk/Mac/include --extra-ldflags=-L/Users/ptl/blackmagicsdk/Mac/include
  libavutil      54. 27.100 / 54. 27.100
  libavcodec     56. 44.100 / 56. 44.100
  libavformat    56. 38.100 / 56. 38.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 17.100 /  5. 17.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.100 /  1.  2.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, avfoundation, from 'none:C-Media USB Audio Device':
  Duration: N/A, start: 1057.070635, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_f32le, 44100 Hz, mono, flt, 1411 kb/s
[decklink @ 0x7fdc23843600] Found Decklink mode 1920 x 1080 with rate 29.97(i)
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, decklink, from 'UltraStudio Mini Recorder at 12:none':
  Duration: N/A, start: 0.000000, bitrate: 1536 kb/s
    Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
    Stream #1:1: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1920x1080, -5 kb/s, 29.97 tbr, 1000k tbn, 29.97 tbc
-async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0.
[libx264 @ 0x7fdc23845c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x7fdc23845c00] profile Constrained Baseline, level 3.0
[libx264 @ 0x7fdc23845c00] 264 - core 144 r2533 c8a773e - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'video_tests/test-avsync.mp4':
  Metadata:
    encoder         : Lavf56.38.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360, q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc
    Metadata:
      encoder         : Lavc56.44.100 libx264
    Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 44100 Hz, mono, s16, 80 kb/s
    Metadata:
      encoder         : Lavc56.44.100 libfdk_aac
Stream mapping:
  Stream #1:1 -> #0:0 (rawvideo (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (pcm_f32le (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
frame=   18 fps=0.0 q=29.0 size=       0kB time=00:00:00.03 bitrate=  11.5kbits/frame=   33 fps= 33 q=29.0 size=      79kB time=00:00:00.53 bitrate=1216.8kbits/frame=   48 fps= 32 q=29.0 size=     148kB time=00:00:01.03 bitrate=1173.1kbits/frame=   63 fps= 31 q=29.0 size=     245kB time=00:00:01.53 bitrate=1305.0kbits/frame=   79 fps= 31 q=29.0 size=     369kB time=00:00:02.06 bitrate=1460.7kbits/frame=   94 fps= 31 q=29.0 size=     491kB time=00:00:02.56 bitrate=1565.9kbits/frame=  109 fps= 31 q=29.0 size=     593kB time=00:00:03.06 bitrate=1583.1kbits/frame=  124 fps= 31 q=29.0 size=     691kB time=00:00:03.57 bitrate=1585.9kbits/frame=  139 fps= 31 q=29.0 size=     785kB 
...
time=00:00:26.79 bitrate=1108.6kbits/frame=  822 fps= 30 q=-1.0 Lsize=    3732kB time=00:00:27.42 bitrate=1114.6kbits/s    
video:3445kB audio:263kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.636530%
[libx264 @ 0x7fdc23845c00] frame I:9     Avg QP:25.83  size: 18818
[libx264 @ 0x7fdc23845c00] frame P:813   Avg QP:27.67  size:  4130
[libx264 @ 0x7fdc23845c00] mb I  I16..4: 32.9%  0.0% 67.1%
[libx264 @ 0x7fdc23845c00] mb P  I16..4:  5.6%  0.0%  1.3%  P16..4: 36.7% 12.2%  4.7%  0.0%  0.0%    skip:39.5%
[libx264 @ 0x7fdc23845c00] coded y,uvDC,uvAC intra: 39.7% 51.8% 17.8% inter: 21.0% 15.6% 0.4%
[libx264 @ 0x7fdc23845c00] i16 v,h,dc,p: 29% 44% 18%  9%
[libx264 @ 0x7fdc23845c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 30% 18%  6%  6%  6%  8%  5%  6%
[libx264 @ 0x7fdc23845c00] i8c dc,h,v,p: 47% 32% 15%  6%
[libx264 @ 0x7fdc23845c00] kb/s:1028.74


Here’s the ffprobe output for the resulting video_tests/test-avsync.mp4 file:

ffprobe -i video_tests/test-avsync.mp4 
ffprobe version N-73104-g7604358 Copyright (c) 2007-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-decklink --extra-cflags=-I/Users/ptl/blackmagicsdk/Mac/include --extra-ldflags=-L/Users/ptl/blackmagicsdk/Mac/include
  libavutil      54. 27.100 / 54. 27.100
  libavcodec     56. 44.100 / 56. 44.100
  libavformat    56. 38.100 / 56. 38.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 17.100 /  5. 17.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.100 /  1.  2.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video_tests/test-avsync.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.38.100
  Duration: 00:00:16.08, start: 0.046440, bitrate: 1406 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360, 1321 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 80 kb/s (default)
    Metadata:
      handler_name    : SoundHandler


I can see that there’s an offset of 0.046440, but I’m not sure if that’s a consistent result. I’m trying to get the capture to produce a result without sync delay but in any case, why would the results be inconsistent?

The MacBook is always pretty idle with no memory issues when doing the capture, and ffmpeg isn’t consuming too much cpu.

Any suggestions on what else I can try to get consistent sync?

thanks
Ricardo





More information about the ffmpeg-user mailing list