2013-01-27, 01:37
FYI - looks like comskip (the kaashoek version as well, not just this port) chokes on Handbrake files which have been encoded via x264 with a variable frame rate - which is Handbrake's default.
If you're comskipping on the source before re-encoding (e.g. if you're working on an H.264 HD recording), you're fine, although you're obviously trusting Handbrake to keep the same timings afterwards; if you're encoding first (e.g. to correct TS errors, or to shrink the file) and thus working off an H.264 encoded version, you'll need to use constant frame rate, otherwise comskip will shoot itself (the malloc in initComSkip simply can't grab enough RAM, unless you have terabytes of the stuff).
From what I can work out, comskip detects the VFR as a frame rate of 90000fps (peak frame rate? Theoretical maximum? Derived from the MPEG timebase?), and then promptly fails to allocate enough memory (not surprising if you remember that 90k fps is 3600x a normal PAL frame rate, so needs 3600x the memory).
Interestingly, mkvinfo, VLC, SMplayer, ffplay and XBMC itself will all tell you that the encoded file is the correct frame rate, so it's something about how comskip (and a few other programs, e.g. tsmuxer) work out the frame rate.
I'm no C/C++ expert, but I think the issue arises in inputReffer in comskip.cpp, but I'll confess to not having fully dissected the code.
If you're comskipping on the source before re-encoding (e.g. if you're working on an H.264 HD recording), you're fine, although you're obviously trusting Handbrake to keep the same timings afterwards; if you're encoding first (e.g. to correct TS errors, or to shrink the file) and thus working off an H.264 encoded version, you'll need to use constant frame rate, otherwise comskip will shoot itself (the malloc in initComSkip simply can't grab enough RAM, unless you have terabytes of the stuff).
From what I can work out, comskip detects the VFR as a frame rate of 90000fps (peak frame rate? Theoretical maximum? Derived from the MPEG timebase?), and then promptly fails to allocate enough memory (not surprising if you remember that 90k fps is 3600x a normal PAL frame rate, so needs 3600x the memory).
Interestingly, mkvinfo, VLC, SMplayer, ffplay and XBMC itself will all tell you that the encoded file is the correct frame rate, so it's something about how comskip (and a few other programs, e.g. tsmuxer) work out the frame rate.
I'm no C/C++ expert, but I think the issue arises in inputReffer in comskip.cpp, but I'll confess to not having fully dissected the code.