Body: <p>According to <a href="https://www.ffmpeg.org/ffmpeg-formats.html#Options-4" rel="nofollow noreferrer">Matroska options</a> , the muxer writes the index at the end of file by default. However, if I save incomplete mkv file while encoding and compare it with the final clip, I can see more than 2 differences in 2 files:</p>
  
  <p><a href="https://i.sstatic.net/FgAM1.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/FgAM1.png" alt="incomplete vs complete"></a></p>
  
  <p>This is not wanted. How to prevent it? I know ffmpeg won't be able to rewrite the file, if the output file is a pipe, but what if I cannot use pipes? (when I need to split the output and using <code>-f segment</code>)</p>
  
  <p>To reproduce using ffmpeg's testsrc:</p>
  
  <pre><code>$ &gt;after.mkv; tail -c +1 -F after.mkv &gt;before.mkv &amp; ffmpeg -y -f lavfi -i testsrc=s=720x576:r=12.5:d=120 after.mkv; sleep 3 ; kill $!
  </code></pre>
  
  <p>Full output:</p>
  
  <pre><code>[1] 6148
  ffmpeg version N-72058-g3ecc063 Copyright (c) 2000-2015 the FFmpeg developers
    built with gcc 4.9.2 (GCC)
    configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
    libavutil      54. 23.101 / 54. 23.101
    libavcodec     56. 38.100 / 56. 38.100
    libavformat    56. 33.100 / 56. 33.100
    libavdevice    56.  4.100 / 56.  4.100
    libavfilter     5. 16.101 /  5. 16.101
    libswscale      3.  1.101 /  3.  1.101
    libswresample   1.  1.100 /  1.  1.100
    libpostproc    53.  3.100 / 53.  3.100
  Input #0, lavfi, from 'testsrc=s=720x576:r=12.5:d=120':
    Duration: N/A, start: 0.000000, bitrate: N/A
      Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 720x576 [SAR 1:1 DAR 5:4], 12.50 tbr, 12.50 tbn, 12.50 tbc
  No pixel format specified, yuv444p for H.264 encoding chosen.
  Use -pix_fmt yuv420p for compatibility with outdated media players.
  [libx264 @ 00000000006bdce0] using SAR=1/1
  [libx264 @ 00000000006bdce0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
  [libx264 @ 00000000006bdce0] profile High 4:4:4 Predictive, level 2.2, 4:4:4 8-bit
  [libx264 @ 00000000006bdce0] 264 - core 146 r2538 121396c - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=12 scenecut=40 intra_refresh=0 rc_lookahead=40 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, matroska, to 'after.mkv':
    Metadata:
      encoder         : Lavf56.33.100
      Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 720x576 [SAR 1:1 DAR 5:4], q=-1--1, 12.50 fps, 1k tbn, 12.50 tbc
      Metadata:
        encoder         : Lavc56.38.100 libx264
  Stream mapping:
    Stream #0:0 -&gt; #0:0 (rawvideo (native) -&gt; h264 (libx264))
  Press [q] to stop, [?] for help
  frame= 1500 fps=231 q=-1.0 Lsize=     575kB time=00:01:59.84 bitrate=  39.3kbits/s
  video:564kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.994470%
  [libx264 @ 00000000006bdce0] frame I:6     Avg QP:13.21  size:  8126
  [libx264 @ 00000000006bdce0] frame P:750   Avg QP:10.61  size:   570
  [libx264 @ 00000000006bdce0] frame B:744   Avg QP:11.90  size:   136
  [libx264 @ 00000000006bdce0] consecutive B-frames:  0.8% 99.2%  0.0%  0.0%
  [libx264 @ 00000000006bdce0] mb I  I16..4: 52.0% 37.3% 10.7%
  [libx264 @ 00000000006bdce0] mb P  I16..4:  1.6%  1.3%  0.1%  P16..4:  3.7%  0.9%  0.6%  0.0%  0.0%    skip:91.7%
  [libx264 @ 00000000006bdce0] mb B  I16..4:  0.2%  0.8%  0.0%  B16..8:  3.0%  0.2%  0.0%  direct: 0.0%  skip:95.8%  L0:49.5% L1:48.3% BI: 2.2%
  [libx264 @ 00000000006bdce0] 8x8 transform intra:49.4% inter:82.8%
  [libx264 @ 00000000006bdce0] coded y,u,v intra: 2.6% 1.6% 1.9% inter: 0.2% 0.2% 0.2%
  [libx264 @ 00000000006bdce0] i16 v,h,dc,p: 68% 24%  2%  7%
  [libx264 @ 00000000006bdce0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 79%  2% 19%  0%  0%  0%  0%  0%  0%
  [libx264 @ 00000000006bdce0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 35% 15%  1%  1%  1%  0%  1%  0%
  [libx264 @ 00000000006bdce0] Weighted P-Frames: Y:0.0% UV:0.0%
  [libx264 @ 00000000006bdce0] ref P L0: 68.2%  2.4% 17.6% 11.8%
  [libx264 @ 00000000006bdce0] ref B L0: 59.1% 40.9%
  [libx264 @ 00000000006bdce0] kb/s:38.46
  [1]+  Terminated              tail -c +1 -F after.mkv &gt; before.mkv
  </code></pre>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-02T04:26:53.833Z
Comments.Text: How can this be duplicated? What is your `ffmpeg` command and complete console output?
Comments.UserDisplayName: llogan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-02T08:35:23.493Z
Comments.Text: @LordNeckbeard updated the question
Comments.UserDisplayName: basin
Tags: <ffmpeg><matroska>
Title: ffmpeg not only writes mkv index at the end, but overwrites multiple places in file
UserDisplayName: basin
ThreadText: # ffmpeg not only writes mkv index at the end, but overwrites multiple places in file
  
  (Asked by: username_0 on 2015-10-01)
  
  According to [Matroska options](https://www.ffmpeg.org/ffmpeg-formats.html#Options-4) , the muxer writes the index at the end of file by default. However, if I save incomplete mkv file while encoding and compare it with the final clip, I can see more than 2 differences in 2 files:
  
  [![incomplete vs complete](https://i.sstatic.net/FgAM1.png)](https://i.sstatic.net/FgAM1.png)
  
  This is not wanted. How to prevent it? I know ffmpeg won't be able to rewrite the file, if the output file is a pipe, but what if I cannot use pipes? (when I need to split the output and using `-f segment`)
  
  To reproduce using ffmpeg's testsrc:
  
  ```
  $ >after.mkv; tail -c +1 -F after.mkv >before.mkv & ffmpeg -y -f lavfi -i testsrc=s=720x576:r=12.5:d=120 after.mkv; sleep 3 ; kill $!
  
  ```
  
  Full output:
  
  ```
  [1] 6148
  ffmpeg version N-72058-g3ecc063 Copyright (c) 2000-2015 the FFmpeg developers
    built with gcc 4.9.2 (GCC)
    configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
    libavutil      54. 23.101 / 54. 23.101
    libavcodec     56. 38.100 / 56. 38.100
    libavformat    56. 33.100 / 56. 33.100
    libavdevice    56.  4.100 / 56.  4.100
    libavfilter     5. 16.101 /  5. 16.101
    libswscale      3.  1.101 /  3.  1.101
    libswresample   1.  1.100 /  1.  1.100
    libpostproc    53.  3.100 / 53.  3.100
  Input #0, lavfi, from 'testsrc=s=720x576:r=12.5:d=120':
    Duration: N/A, start: 0.000000, bitrate: N/A
      Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 720x576 [SAR 1:1 DAR 5:4], 12.50 tbr, 12.50 tbn, 12.50 tbc
  No pixel format specified, yuv444p for H.264 encoding chosen.
  Use -pix_fmt yuv420p for compatibility with outdated media players.
  [libx264 @ 00000000006bdce0] using SAR=1/1
  [libx264 @ 00000000006bdce0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
  [libx264 @ 00000000006bdce0] profile High 4:4:4 Predictive, level 2.2, 4:4:4 8-bit
  [libx264 @ 00000000006bdce0] 264 - core 146 r2538 121396c - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=12 scenecut=40 intra_refresh=0 rc_lookahead=40 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, matroska, to 'after.mkv':
    Metadata:
      encoder         : Lavf56.33.100
      Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 720x576 [SAR 1:1 DAR 5:4], q=-1--1, 12.50 fps, 1k tbn, 12.50 tbc
      Metadata:
        encoder         : Lavc56.38.100 libx264
  Stream mapping:
    Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
  Press [q] to stop, [?] for help
  frame= 1500 fps=231 q=-1.0 Lsize=     575kB time=00:01:59.84 bitrate=  39.3kbits/s
  video:564kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.994470%
  [libx264 @ 00000000006bdce0] frame I:6     Avg QP:13.21  size:  8126
  [libx264 @ 00000000006bdce0] frame P:750   Avg QP:10.61  size:   570
  [libx264 @ 00000000006bdce0] frame B:744   Avg QP:11.90  size:   136
  [libx264 @ 00000000006bdce0] consecutive B-frames:  0.8% 99.2%  0.0%  0.0%
  [libx264 @ 00000000006bdce0] mb I  I16..4: 52.0% 37.3% 10.7%
  [libx264 @ 00000000006bdce0] mb P  I16..4:  1.6%  1.3%  0.1%  P16..4:  3.7%  0.9%  0.6%  0.0%  0.0%    skip:91.7%
  [libx264 @ 00000000006bdce0] mb B  I16..4:  0.2%  0.8%  0.0%  B16..8:  3.0%  0.2%  0.0%  direct: 0.0%  skip:95.8%  L0:49.5% L1:48.3% BI: 2.2%
  [libx264 @ 00000000006bdce0] 8x8 transform intra:49.4% inter:82.8%
  [libx264 @ 00000000006bdce0] coded y,u,v intra: 2.6% 1.6% 1.9% inter: 0.2% 0.2% 0.2%
  [libx264 @ 00000000006bdce0] i16 v,h,dc,p: 68% 24%  2%  7%
  [libx264 @ 00000000006bdce0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 79%  2% 19%  0%  0%  0%  0%  0%  0%
  [libx264 @ 00000000006bdce0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 35% 15%  1%  1%  1%  0%  1%  0%
  [libx264 @ 00000000006bdce0] Weighted P-Frames: Y:0.0% UV:0.0%
  [libx264 @ 00000000006bdce0] ref P L0: 68.2%  2.4% 17.6% 11.8%
  [libx264 @ 00000000006bdce0] ref B L0: 59.1% 40.9%
  [libx264 @ 00000000006bdce0] kb/s:38.46
  [1]+  Terminated              tail -c +1 -F after.mkv > before.mkv
  
  ```
  
  **Tags:** ffmpeg, matroska
  
  > **Comments:**
  > **username_1**: How can this be duplicated? What is your `ffmpeg` command and complete console output?  
  > **username_0**: @LordNeckbeard updated the question  
  
  ---
  
  ## 0 answers
  
  