[FFmpeg-user] FFmpeg capture, mkvtimestamp_v2, vsync 0 and timecode don't play nice

Bouke bouke at editb.nl
Mon May 24 14:56:26 EEST 2021

Trying to capture and modify the TC in-file afterwards.
I've found a nice way to store the timestamps from the capture.

This works fine using this line:

ffmpeg -hide_banner -f "decklink" -queue_size "1073741824" -raw_format "auto" -format_code "Hi50" -video_input "sdi" -i "bm mini One" -filter_complex "settb=1/1000,setpts=RTCTIME/1000-1500000000000,mpdecimate,split[out][ts];[out]setpts=N/25/TB[out]" -map "[out]" -c:a "copy" -c:v "prores" -profile:v "1" -vendor "ap10" -pix_fmt "yuv422p10le" "/Volumes/Data/tst1.mov" -map "[ts]" -f mkvtimestamp_v2 "/Volumes/Data/time.txt" -vsync 0

But, when I add -timecode "00:00:00:00" (to force a TC atom in the output), horrible things happen.

ffmpeg -f "decklink" -queue_size "1073741824" -raw_format "auto" -format_code "Hi50" -video_input "sdi" -i "bm mini One" -filter_complex "settb=1/1000,setpts=RTCTIME/1000-1500000000000,mpdecimate,split[out][ts];[out]setpts=N/25/TB[out]" -map "[out]" -timecode "00:01:00:00" -c:a "copy" -c:v "prores" -profile:v "1" -vendor "ap10" -pix_fmt "yuv422p10le" "/Volumes/Data/tst1.mov" -map "[ts]" -f mkvtimestamp_v2 "/Volumes/Data/time.txt" -vsync 0

The timecode does not run at the video speed, skips a frame or two here and there, and the image freezes after a random amount of time (between 10 seconds and a minute or so).

How come the timecode can mess up stuff that much? From what I understand it's just a couple of atoms in the moov atom, and a reference where the actual TC value (as frames) is stored in the mdat.

I highly suspect the -vsync 0 to also work on the video. If I omit that, the video is fine, the TC is fine, but there is no metadata output, just the # timecode format v2

The alternative to this dance is to use -timestamp_align, but I also want to use non-decklink audio, and I can’t get that in sync. (Using -ss for sound is not accurate.)

Output from the terminal: (non-working file)

bouke at Boukes-iMac ~ %  ffmpeg -f "decklink" -queue_size "1073741824" -raw_format "auto" -format_code "Hi50" -video_input "sdi" -i "bm mini One" -filter_complex "settb=1/1000,setpts=RTCTIME/1000-1500000000000,mpdecimate,split[out][ts];[out]setpts=N/25/TB[out]" -map "[out]" -timecode "00:01:00:00" -c:a "copy" -c:v "prores" -profile:v "1" -vendor "ap10" -pix_fmt "yuv422p10le" "/Volumes/Data/tst1.mov" -map "[ts]"  -f mkvtimestamp_v2 "/Volumes/Data/time.txt" -vsync 0
ffmpeg version git-2021-03-31-b3e9a84 Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 12.0.0 (clang-1200.0.32.29)
  configuration: --enable-videotoolbox --enable-nonfree --enable-gpl --enable-lv2 --enable-openssl --enable-libsvtav1 --enable-libx264 --enable-libx265 --enable-libvpx --enable-libxvid --enable-libvidstab --enable-libaom --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora --enable-libfdk-aac --enable-libwebp --enable-libsrt --disable-debug --disable-doc --disable-shared --enable-pthreads --enable-static --enable-small --enable-version3 --enable-libfreetype --enable-libfontconfig --enable-decklink --extra-cflags='-I/Users/bouke/ffmpeg-build-script/workspace/include -I/Users/bouke/ffmpeg-build-script/include' --extra-ldexeflags= --extra-ldflags='-L/Users/bouke/ffmpeg-build-script/workspace/lib -L/Users/bouke/ffmpeg-build-script/include' --extra-libs='-ldl -lpthread -lm -lz' --pkgconfigdir=/Users/bouke/ffmpeg-build-script/workspace/lib/pkgconfig --pkg-config-flags=--static --prefix=/Users/bouke/ffmpeg-build-script/workspace
  libavutil      56. 63.101 / 56. 63.101
  libavcodec     58.117.101 / 58.117.101
  libavformat    58. 65.101 / 58. 65.101
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 96.100 /  7. 96.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
[decklink @ 0x7fc41a808200] Found Decklink mode 1920 x 1080 with rate 25.00(i)
[decklink @ 0x7fc41a808200] Frame received (#1) - No input signal detected - Frames dropped 1
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, decklink, from 'bm mini One':
  Duration: N/A, start: 0.000000, bitrate: 830976 kb/s
    Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
    Stream #0:1: Video: rawvideo (UYVY / 0x59565955), uyvy422(top first), 1920x1080, 829440 kb/s, 25 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:1 (rawvideo) -> settb
  setpts -> Stream #0:0 (prores)
  split:output1 -> Stream #1:0 (rawvideo)
Press [q] to stop, [?] for help
Output #0, mov, to '/Volumes/Data/tst1.mov':
    timecode        : 00:01:00:00
    encoder         : Lavf58.65.101
    Stream #0:0: Video: prores (apcs / 0x73637061), yuv422p10le(tv, top coded first (swapped)), 1920x1080, q=2-31, 200 kb/s, 0.04 fps, 12800 tbn
      encoder         : Lavc58.117.101 prores
Output #1, mkvtimestamp_v2, to '/Volumes/Data/time.txt':
    encoder         : Lavf58.65.101
    Stream #1:0: Video: rawvideo (Y42B / 0x42323459), yuv422p(tv, top coded first (swapped)), 1920x1080, q=2-31, 829440 kb/s, 25 fps, 1k tbn
      encoder         : Lavc58.117.101 rawvideo
frame=    1 fps=0.0 q=0.0 q=-0.0 size=       0kB time=33848:30:24.72 bitrate=   [decklink @ 0x7fc41a808200] Frame received (#8) - Input returned - Frames dropped 2
frame=    9 fps=0.0 q=-0.0 q=-0.0 size=    2304kB time=33848:30:25.24 bitrate=  frame=   22 fps= 21 q=-0.0 q=-0.0 size=    7424kB time=33848:30:25.76 bitrate=  frame=   35 fps= 22 q=-0.0 q=-0.0 size=   12800kB time=33848:30:26.28 bitrate=  frame=   48 fps= 23 q=-0.0 q=-0.0 size=   17920kB time=33848:30:26.80 bitrate=  frame=   61 fps= 23 q=-0.0 q=-0.0 size=   23296kB time=33848:30:27.32 bitrate=  frame=   71 fps= 23 q=-0.0 Lq=-0.0 size=   28128kB time=33848:30:27.72 bitrate=   0.0kbits/s speed=3.99e+07x    
video:315677kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

More information about the ffmpeg-user mailing list