Added comments that describe how to get the latest ffmpeg and patch it
[videoscripts/.git] / mkv_extract_chapter
index 53d3cb741d016820b0ebef43cd21370d2b9a55a1..4653278b1e1b675e5152a664e2aa268e79031114 100755 (executable)
@@ -1,6 +1,14 @@
 #!/usr/bin/perl
 # Author: Alan J. Pippin
 # Description: Extract the given chapter(s) from an mkv file into separate video files
+# Requires: Newer version of ffmpeg to be installed that supports MKV chapters
+
+# Howto compile the latest FFMPEG from src under Linux
+# FFMPEG - http://ubuntuforums.org/showthread.php?t=786095
+
+# Howto eliminate the non-monotonically increasing dts to muxer error
+# Comment out the error message in ffmpeg src tree in libavformat/utils.c
+# http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=49
 
 # MOV:
 # major_brand : qt
@@ -82,8 +90,11 @@ sub detect_ext {
        }
     }
 
+    # Quicktime/MOV
     if($h264 && $pcm_s16le) { return "mov"; }
-    if($h264_high && $ac3) { return "mts"; }
+    # MTS
+    if($h264_high && $ac3) { return "mp4"; }
+    # 3GP/MP4
     if($h264 && $aac) { return "mp4"; }
 
     return "UNKNOWN";
@@ -113,6 +124,7 @@ foreach $line (@ffmpeg_info) {
     if($line =~ /Chapter #\d+\.(\d+): start (\S+), end (\S+)/) {
        $chapter = $1;
        $start = $2;
+        if($start > 0) { $start += 1; } # Add some margin to prevent taking a piece of the previous clip
        $end = $3;
        $duration = $end - $start;
        if($duration < 0) { die "-E- Unexpected negative duration detected for chapter $chapter\n"; }
@@ -128,6 +140,7 @@ foreach $line (@ffmpeg_info) {
                print "$cmd\n";
            } else {
                print "\n";
+               print "$cmd\n";
                $errno = system("$cmd");
                $errno = $errno >> 8;
                if($errno > 0) { die "-E- ffmpeg encountered some errors with exit code $errno\n"; }