MKV split with mkvmerge won't transcode
MediaInfo tells me the only notable difference is that the original, playable MKV contains this info, which is not in the new, unplayable file:
Format settings, GOP : M=8, N=24
Here's an example of how I did the split (extracting a 7-minute segment to a separate file):
mkvmerge --split parts:30:17.08-37:58.2 -o "output.mkv" "input.mkv"
Like I said, input.mkv plays fine. output.mkv does not.
I used mkvmerge because ffmpeg has trouble demuxing MKVs. For example, if I try to do the split with ffmpeg...
ffmpeg -ss 00:30:17.08 -i "input.mkv" -t 00:07:41.12 -vcodec copy -acodec copy "output.mkv"
...then I get this:
- Code:
Input #0, matroska,webm, from 'input.mkv':
Metadata:
creation_time : 2012-11-10 19:18:27
Duration: 01:41:30.20, start: 0.000000, bitrate: 8779 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc
Stream #0:1(ita): Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
Output #0, matroska, to 'output.mkv':
Metadata:
encoder : Lavf54.36.100
Stream #0:0: Video: h264, yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 1k tbn, 1k tbc
Stream #0:1(ita): Audio: ac3, 48000 Hz, stereo, 192 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[matroska @ 0000000005a575a0] pts (-880) < dts (-800) in stream 0
av_interleaved_write_frame(): Invalid argument
Here's the ffmpeg -i for the original file:
- Code:
ffmpeg version N-46469-gc995644 Copyright (c) 2000-2012 the FFmpeg developers
built on Nov 5 2012 17:58:15 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 5.100 / 52. 5.100
libavcodec 54. 71.100 / 54. 71.100
libavformat 54. 36.100 / 54. 36.100
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 21.106 / 3. 21.106
libswscale 2. 1.102 / 2. 1.102
libswresample 0. 16.100 / 0. 16.100
libpostproc 52. 1.100 / 52. 1.100
Input #0, matroska,webm, from 'input.mkv':
Metadata:
creation_time : 2012-11-10 19:18:27
Duration: 01:41:30.20, start: 0.000000, bitrate: 8779 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc
Stream #0:1(ita): Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
And here's the ffmpeg -i for the new file (not very helpful):
- Code:
[same config]
Input #0, matroska,webm, from 'output.mkv':
Metadata:
creation_time : 2012-11-11 06:28:30
Duration: 00:07:41.56, start: 0.000000, bitrate: 9845 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc
Stream #0:1(ita): Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
Also, I tried removing the following line from profiles.xml:
<Matches container="matroska" mkvHeaderCompressed="true" />
When I do that, no transcoding is attempted, but then none of the MKVs will play, not even the original. I get "Not supported file format" after a long pause. So I leave this line in.
Is this a problem that Serviio can work around, or do I need to take it up with the mkvmerge developers, or am I doing something wrong...?
Thanks for taking a look, and let me know if you need more info.
- My current transcoding configuration for Roku Stick, Dish Hopper, and Samsung BD-C6500, + other Serviio notes.