1

I've just about lost my mind on this, I'm sure I'm missing something simple.

I have two *.mkv files generated by OBS. Even better, I've just copied one file twice, so I am sure I have the same bitrate, fps, tbn, whatever.

then I do:

ffmepg -i "concat:file1.mkv|file1_copy.mkv" -c copy test.mkv

It runs and my screen fills with yellow messages:

    ffmpeg -i "concat:file1.mkv|file1_copy.mkv" -c copy test.mkv
ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.1.1 (GCC) 20190807
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, matroska,webm, from 'concat:file1.mkv|file1_copy.mkv':
  Metadata:
    ENCODER         : Lavf58.20.100
  Duration: 00:00:09.15, start: 0.000000, bitrate: 2006 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
    Metadata:
      DURATION        : 00:00:09.150000000
    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
    Metadata:
      title           : simple_aac_recording
      DURATION        : 00:00:09.102000000
Output #0, matroska, to 'test.mkv':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 60 fps, 60 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      DURATION        : 00:00:09.150000000
    Stream #0:1: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 44100 Hz, stereo, fltp (default)
    Metadata:
      title           : simple_aac_recording
      DURATION        : 00:00:09.102000000
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[matroska,webm @ 00000156ce7f14c0] File extends beyond end of segment.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 0; changing to 9100. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 67; changing to 9100. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 33; changing to 9100. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:1; previous: 9102, current: 0; changing to 9102. This may result in incorrect timestamps in the output file.
[matroska @ 00000156cef62040] Non-monotonous DTS in output stream 0:0; previous: 9100, current: 17; changing to 9100. This may result in incorrect timestamps in the output file.

############## thousands of the above lines here #####################

frame= 1098 fps=0.0 q=-1.0 Lsize=    2241kB time=00:00:09.11 bitrate=2013.0kbits/s speed=24.9x
video:2068kB audio:159kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.607770%

When opened, the timestamps only go to the end of the first segment, even though the video continues afterwards. Normally this would be fine, but I'm recording instructional videos and it would be nice for users to be able to skip around them. This occurs even if I re-encode the videos (which I shouldn't need, since they are identical) or re-encode the output.

Everything I have read online says:

  • re-encode*into .mkv to fix this, since .mkv has a fixed tbn - it's already .mkv

  • the problem is different bitrates/tbs/fps/whatever - for now, they're the same video twice

  • use -fflags +genpts, -use_wallclock_as_timestamps 1, vsync 0 -enc_time_base -1 - none of these do anything as far as I can tell, either before -i or after -c copy

I've run out of ideas. What am I doing wrong.

Daniel F
  • 13,620
  • 2
  • 29
  • 55
  • I don't know, but I suspect that posting the complete output of `ffmpeg` would make this easier to answer. It's not really clear whether the two lines you've chosen are actually related to the problem. – Nate Eldredge Mar 25 '20 at 13:22
  • @NateEldredge didn't want to post the full trace as it is thousands of lines long, but I put the most relevant parts in. – Daniel F Mar 25 '20 at 13:41
  • 2
    You can't use concat protocol with mkv. Use the concat demuxer. – Gyan Mar 25 '20 at 16:30

0 Answers0