Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
![]() |
#1 | Link |
Registered User
Join Date: Aug 2018
Posts: 8
|
Cutting on IDR frames in mkvmerge
Hello all,
I thought this would probably go better in the editing sub-forum but couldn't find an appropriate category as it doesn't related to avisynth or NLE, etc. So I placed it here..... I am trying to cut out sections from an h264 source. I understand I need to cut on the IDR frames so I extracted the raw file, ran it through FrameCounter to identify the IDR frames, and selected the appropriate frames. To test my identification of IDR frames, I cut each desired segment out as an individual file and checked playback. Each file played perfectly. To further test the cuts were appropriate, I combined them and they played seamlessly as a single file. All this was done in mkvmerge command line, so no re-encoding is occurring. Now, I want to do the inverse. In other words, instead of keeping the sections as separate files, I want to discard those portions and leave the remainder of the film intact. But when I do this, using those same ranges, the film now has playback errors (a/v sync issues, black screen with ongoing audio, etc.). So, for whatever reason, I am extracting on IDRs, but I am not discarding on IDRs, if that makes sense. Here are some concrete details: Sections (note, each range below begins and ends on an IDR frame): 56075-56195 77926-77950 80223-80343 To extract the sections, I use: mkvmerge -o output.mkv --split parts-frames:56073-56193,77924-77948,80221-80341 input.mkv (The frames referenced here are each -2 from the IDR frames identified above because mkvmerge begins counting frames at 1 and FrameCounter begins at 0, so I subtract 2 in order to be safe.) As I said above, this works flawlessly. The individual files play great and they can be merged with no issues, because they are each an independent GOP. To try and discard the sections, I use: mkvmerge -o output.mkv --split parts-frames:-56073,+56193-77924,+77948-80223,+80343- input.mkv For whatever reason, the resulting output file is not cutting on the IDR frames and the playback is funky. I have tried adjusting those frame ranges a few, never going above the IDR # (e.g., 56071, 56072, 56074, but not 56075+), and it doesn't make any difference. Any ideas? Last edited by Travillion; 20th January 2019 at 22:37. |
![]() |
![]() |
![]() |
#2 | Link |
Formerly davidh*****
Join Date: Jan 2004
Posts: 2,456
|
So I can get this straight, you've got a video made of I-frames and other (dependent) frames:
Code:
I???????I???????I???????I???????I Code:
I???????I But if you're cutting, don't you have to be sure that you are only discarding non-I-frames? Your "subtract 2 in order to be safe" doesn't seem consistent with that. You should - again, if I've got this right, I might be wrong - only try to delete 56076-56194. If you delete any I-frames I think you'll ruin the GOPs either side, won't you? |
![]() |
![]() |
![]() |
#3 | Link | |
Registered User
Join Date: Aug 2018
Posts: 8
|
Quote:
There is something in my mkvmerge directions that is off, such that it will extract them properly but it's not discarding them properly. I can't figure out why. I'm sure my subtract 2 is not helping, but I've tried any number of variations around those cut points and still no success. |
|
![]() |
![]() |
![]() |
#4 | Link |
Matroska find' ich toll
Join Date: Apr 2008
Posts: 1,311
|
Hey Travillion and welcome to Doom9
Mkvmerge and cutting works and sometimes not, this is depend from some things. I have many experience with this topic and the issue comes often by the audio. Yes you can cut on video IDR frames but an audio frame is in Matroska not so easy to handle and often there are audio data which have a longer duration as the video. Use MediaInfo for a quick overview about the durations. There is a global file duration and each video and audio track has a duration. In MKVToolNix(MTX) info tool you get a better info about the durations. After combine and/or cutting(with auto-merge) the file plays fine or not and some players can handle such files like MPC-HC(but not always). If I understand you right you want cut out 3 small sections?! 56075-56195 : frame 56076 until 56194 should discard -> 118 frames 77926-77950 : -> 22 frames 80223-80343 : -> 118 frames You could use Ordered Chapters instead of cutting. This will work perfect because you have IDR frames at the right place. Chapter 1: Start time 00000 -> End time 56075 Chapter 2: Start time 56195 -> End time 77926 Chapter 3: Start time 77950 -> End time 80223 Chapter 4: Start time 80343 -> End time last frame(+frame duration) The frames must be changed to a timestamp! |
![]() |
![]() |
![]() |
#5 | Link | |
Registered User
Join Date: Aug 2018
Posts: 8
|
Quote:
Since I seemed to be able to cut and join fine, just not discard, I decided to use that approach. I cut the file at each desired IDR break point and then appended the cuts, omitting the unwanted sections. This worked great for most of it, except I encountered an error with two of the files (not at join points). "Warning: input.mkv: Error in the Matroska file structure at position xxxxx. Resyncing to the next level 1 element. Warning: The last timestamp processed before the error was encountered was: xxxxxx. Warning: Resyncing successful at position xxxxx. Warning: The first cluster timestamp after the resync is xxxx." As I said I got these for 2 of the 9 files, and they were not at join points. When I try and play the file, it plays fine up until the timestamp of the error, at which point audio completely cuts out and you can't seek to prior the error, and the movie duration is off. Joining any of the other component files is fine. It's just these two files that bring up this error. I'm guessing the underlying files are corrupt somehow. Strangely, they play just fine by themselves, so I think it must be an error that is only brought to light when mkvmerge is trying to append (and thus timing info is messed with?). |
|
![]() |
![]() |
![]() |
#6 | Link |
Matroska find' ich toll
Join Date: Apr 2008
Posts: 1,311
|
With Ordered Chapters you can so often and very fast change the timestamps to get the result like you need.
Cutting with mkvmerge and re-merge the cut-parts is a process which take to much time, and often you have to repeat it until the result is fine. When I came to Matroska and found the feature "Ordered Chapters" I was so happy. You can also have multiple editions and one edition in my mkv's has complete/untouched chapters to play the whole content of the mkv. With my chapterEditor is it an easy and fast task to generate multiple editions with different parts of the movie. |
![]() |
![]() |
![]() |
#7 | Link | |
Registered User
Join Date: Aug 2018
Posts: 8
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 | Link |
Registered User
Join Date: May 2016
Posts: 197
|
1. What FrameCounter tool are you talking about? I only found a tool of that name that appears to be made for showing the FPS of game consoles (the PSP). The reason I am asking this is to find out whether this tool is really able to distinguish IDR frames from ordinary keyframes; also, are its ranges in output order or in decoding order (and if the very first GOP contains undecodable leading frames (that are undecodable because they are missing references from the preceding GOP), how is this handled -- after all these frames lead to no output)?
2. In mkvmerge version 30.0 and 30.1, the files written are flushed after muxing is complete (from mkvmerge's point of view; at this stage, parts of the file are still in memory and not yet written to disc) in order to prevent errors like you have experienced (in future versions, the flushing will be an opt-in feature (see here)). So I am wondering what version of mkvmerge you're usng. 3. Probably the best you can do (apart from uploading the whole input file which probably isn't possible because it's copyrighted?) is to upload the output of "mkvinfo -s -r <output.log> <Matroska file>" for the relevant Matroska files somewhere. 4. The actual place for MKVToolNix bug reports is here. |
![]() |
![]() |
![]() |
Tags |
cut, idr, mkvmerge |
Thread Tools | Search this Thread |
Display Modes | |
|
|