OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / test / test.c
index dc61c57..419e39b 100644 (file)
@@ -91,6 +91,7 @@ static char * preset_name   = 0;
 static int    cfr           = 0;
 static int    mp4_optimize  = 0;
 static int    ipod_atom     = 0;
+static int    color_matrix  = 0;
 
 /* Exit cleanly on Ctrl-C */
 static volatile int die = 0;
@@ -475,232 +476,481 @@ static int HandleEvents( hb_handle_t * h )
             {
                 fprintf( stderr, "+ Using preset: %s", preset_name);
 
-                if (!strcmp(preset_name, "Animation"))
+                if (!strcmp(preset_name, "Universal"))
                 {
-                    mux = HB_MUX_MKV;
+                    mux = HB_MUX_MP4;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1000;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2");
-                    deinterlace = 1;
-                    deinterlace_opt = "0";
+                    job->vquality = 0.589999973773956;
+                    job->crf = 1;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1,1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160,auto");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48,Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac,ac3");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2,auto");
+                    }
+                    maxWidth = 720;
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=30:cabac=0:ref=3:mixed-refs=1:analyse=all:me=umh:no-fast-pskip=1");
+                    }
+                    pixelratio = 2;
                     job->chapter_markers = 1;
-                    pixelratio = 1;
-                    twoPass = 1;
-                    turbo_opts_enabled = 1;
                 }
 
                 if (!strcmp(preset_name, "AppleTV"))
                 {
-                    if (!acodecs)
-                    {
-                        acodecs = strdup("faac,ac3");
-                    }
-
                     mux = HB_MUX_MP4;
                     job->largeFileSize = 1;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 2500;
-                    default_abitrate = 160;
-                    default_arate = 48000;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("bframes=3:ref=1:me=umh:no-fast-pskip=1:trellis=1:cabac=0");
+                    job->vquality = 0.589999973773956;
+                    job->crf = 1;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1,1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160,auto");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48,Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac,ac3");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2,auto");
+                    }
+                    maxWidth = 960;
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=30:cabac=0:ref=3:mixed-refs=1:bframes=6:weightb=1:direct=auto:no-fast-pskip=1:me=umh:subq=9:analyse=all");
+                    }
+                    pixelratio = 2;
                     job->chapter_markers = 1;
-                    pixelratio = 1;
                 }
 
-                if (!strcmp(preset_name, "Bedlam"))
+                if (!strcmp(preset_name, "iPod Classic & iPod Nano"))
                 {
-                    mux = HB_MUX_MKV;
+                    mux = HB_MUX_MP4;
+                    job->ipod_atom = 1;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1800;
-                    default_acodec = HB_ACODEC_AC3;
-                    x264opts = strdup("ref=16:mixed-refs:bframes=16:bime:weightb:b-rdo:direct=auto:b-pyramid:me=esa:subme=7:me-range=64:analyse=all:8x8dct:trellis=1:no-fast-pskip:no-dct-decimate:filter=-2,-1");
+                    job->vbitrate = 700;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    maxWidth = 320;
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1");
+                    }
                     job->chapter_markers = 1;
-                    pixelratio = 1;
-                    twoPass = 1;
-                    turbo_opts_enabled = 1;
                 }
 
-                if (!strcmp(preset_name, "Blind"))
+                if (!strcmp(preset_name, "iPhone & iPod Touch"))
                 {
                     mux = HB_MUX_MP4;
-                    job->vbitrate = 512;
-                    default_abitrate = 128;
-                    default_acodec = HB_ACODEC_FAAC;
-                    job->width = 512;
+                    job->ipod_atom = 1;
+                    vcodec = HB_VCODEC_X264;
+                    job->vbitrate = 960;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("128");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    maxWidth = 480;
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:trellis=1");
+                    }
                     job->chapter_markers = 1;
                 }
 
-                if (!strcmp(preset_name, "Broke"))
+                if (!strcmp(preset_name, "iPod Legacy"))
                 {
                     mux = HB_MUX_MP4;
+                    job->ipod_atom = 1;
                     vcodec = HB_VCODEC_X264;
-                    size = 695;
-                    default_abitrate = 128;
-                    default_acodec = HB_ACODEC_FAAC;
-                    job->width = 640;
-                    x264opts = strdup("ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:trellis=1:analyse=all:8x8dct:no-fast-pskip");
+                    job->vbitrate = 1500;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    maxWidth = 640;
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1");
+                    }
                     job->chapter_markers = 1;
-                    twoPass = 1;
-                    turbo_opts_enabled = 1;
                 }
 
-                if (!strcmp(preset_name, "Classic"))
+                if (!strcmp(preset_name, "QuickTime"))
                 {
                     mux = HB_MUX_MP4;
-                    job->vbitrate = 1000;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                }
-
-                if (!strcmp(preset_name, "Constant Quality Rate"))
-                {
-                    mux = HB_MUX_MKV;
                     vcodec = HB_VCODEC_X264;
-                    job->vquality = 0.64709997177124023;
-                    job->crf = 1;
-                    default_acodec = HB_ACODEC_AC3;
-                    x264opts = strdup("ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh");
-                    job->chapter_markers = 1;
+                    job->vbitrate = 1800;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("ref=3:mixed-refs:bframes=3:weightb:direct=auto:me=umh:subme=7:analyse=all:8x8dct:trellis=1:no-fast-pskip=1:psy-rd=1,1");
+                    }
                     pixelratio = 1;
-                }
-
-                if (!strcmp(preset_name, "Deux Six Quatre"))
-                {
-                    mux = HB_MUX_MKV;
-                    vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1600;
-                    default_acodec = HB_ACODEC_AC3;
-                    x264opts = strdup("ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip");
                     job->chapter_markers = 1;
-                    pixelratio = 1;
                     twoPass = 1;
                     turbo_opts_enabled = 1;
                 }
 
-                if (!strcmp(preset_name, "Film"))
+                if (!strcmp(preset_name, "Normal"))
                 {
-                    mux = HB_MUX_MKV;
+                    mux = HB_MUX_MP4;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1800;
-                    default_acodec = HB_ACODEC_AC3;
-                    x264opts = strdup("ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:analyse=all:8x8dct:trellis=1:no-fast-pskip");
-                    job->chapter_markers = 1;
+                    job->vbitrate = 1500;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("ref=2:bframes=2:me=umh");
+                    }
                     pixelratio = 1;
+                    job->chapter_markers = 1;
                     twoPass = 1;
                     turbo_opts_enabled = 1;
                 }
 
-                if (!strcmp(preset_name, "iPhone / iPod Touch"))
+                if (!strcmp(preset_name, "Classic"))
                 {
                     mux = HB_MUX_MP4;
-                    job->ipod_atom = 1;
-                    vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 960;
-                    default_abitrate = 128;
-                    default_arate = 48000;
-                    default_acodec = HB_ACODEC_FAAC;
-                    job->width = 480;
-                    x264opts = strdup("level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:trellis=1");
-                    job->chapter_markers = 1;
+                    job->vbitrate = 1000;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
                 }
 
-                if (!strcmp(preset_name, "iPod High-Rez"))
+                if (!strcmp(preset_name, "Animation"))
                 {
-                    mux = HB_MUX_MP4;
-                    job->ipod_atom = 1;
+                    mux = HB_MUX_MKV;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1500;
-                    default_abitrate = 160;
-                    default_arate = 48000;
-                    default_acodec = HB_ACODEC_FAAC;
-                    job->width = 640;
-                    x264opts = strdup("level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1");
+                    job->vbitrate = 1000;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("ref=5:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2:psy-rd=1,1:subme=9");
+                    }
+                    detelecine = 1;
+                    decomb = 1;
+                    pixelratio = 1;
                     job->chapter_markers = 1;
+                    twoPass = 1;
+                    turbo_opts_enabled = 1;
                 }
 
-                if (!strcmp(preset_name, "iPod Low-Rez"))
+                if (!strcmp(preset_name, "Constant Quality Rate"))
                 {
-                    mux = HB_MUX_MP4;
-                    job->ipod_atom = 1;
+                    mux = HB_MUX_MKV;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 700;
-                    default_abitrate = 160;
-                    default_arate = 48000;
-                    default_acodec = HB_ACODEC_FAAC;
-                    job->width = 320;
-                    x264opts = strdup("level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1");
+                    job->vquality = 0.600000023841858;
+                    job->crf = 1;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("auto");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("ac3");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("auto");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("ref=3:mixed-refs:bframes=3:b-pyramid:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh:subme=9:psy-rd=1,1");
+                    }
+                    pixelratio = 1;
                     job->chapter_markers = 1;
                 }
 
-                if (!strcmp(preset_name, "Normal"))
+                if (!strcmp(preset_name, "Film"))
                 {
-                    mux = HB_MUX_MP4;
+                    mux = HB_MUX_MKV;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1500;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("ref=2:bframes=2:me=umh");
-                    job->chapter_markers = 1;
+                    job->vbitrate = 1800;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("auto");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("ac3");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("auto");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=9:analyse=all:8x8dct:trellis=1:no-fast-pskip:psy-rd=1,1");
+                    }
                     pixelratio = 1;
+                    job->chapter_markers = 1;
                     twoPass = 1;
                     turbo_opts_enabled = 1;
                 }
 
-                if (!strcmp(preset_name, "PS3"))
+                if (!strcmp(preset_name, "Television"))
                 {
-                    mux = HB_MUX_MP4;
+                    mux = HB_MUX_MKV;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 2500;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("level=41:me=umh");
+                    job->vbitrate = 1300;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=9:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip=1:psy-rd=1,1");
+                    }
+                    detelecine = 1;
+                    decomb = 1;
                     pixelratio = 1;
+                    job->chapter_markers = 1;
+                    twoPass = 1;
+                    turbo_opts_enabled = 1;
                 }
 
                 if (!strcmp(preset_name, "PSP"))
                 {
                     mux = HB_MUX_MP4;
                     job->vbitrate = 1024;
-                    default_abitrate = 128;
-                    default_arate = 48000;
-                    default_acodec = HB_ACODEC_FAAC;
-                    job->width = 368;
-                    job->height = 208;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("128");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    maxWidth = 368;
+                    maxHeight = 208;
                     job->chapter_markers = 1;
                 }
 
-                if (!strcmp(preset_name, "QuickTime"))
+                if (!strcmp(preset_name, "PS3"))
                 {
                     mux = HB_MUX_MP4;
                     vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 2000;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:analyse=all:trellis=1:no-fast-pskip");
-                    job->chapter_markers = 1;
+                    job->vbitrate = 2500;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    job->crop[0] = 0;
+                    job->crop[1] = 0;
+                    job->crop[2] = 0;
+                    job->crop[4] - 0;
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=41:me=umh");
+                    }
                     pixelratio = 1;
-                    twoPass = 1;
-                    turbo_opts_enabled = 1;
-                }
-
-                if (!strcmp(preset_name, "Television"))
-                {
-                    mux = HB_MUX_MKV;
-                    vcodec = HB_VCODEC_X264;
-                    job->vbitrate = 1300;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip");
-                    deinterlace = 1;
-                    deinterlace_opt = "0";
-                    denoise = 1;
-                    denoise_opt = "2:1:2:3";
-                    job->chapter_markers = 1;
-                    twoPass = 1;
-                    turbo_opts_enabled = 1;
                 }
 
                 if (!strcmp(preset_name, "Xbox 360"))
@@ -708,9 +958,30 @@ static int HandleEvents( hb_handle_t * h )
                     mux = HB_MUX_MP4;
                     vcodec = HB_VCODEC_X264;
                     job->vbitrate = 2000;
-                    default_abitrate = 160;
-                    default_acodec = HB_ACODEC_FAAC;
-                    x264opts = strdup("level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1");
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = strdup("160");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("48");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    if( !x264opts )
+                    {
+                        x264opts = strdup("level=40:ref=2:mixed-refs:bframes=3:weightb:subme=9:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1");
+                    }
                     pixelratio = 1;
                 }
             }
@@ -1302,6 +1573,11 @@ static int HandleEvents( hb_handle_t * h )
             {
                 job->crf = 1;
             }
+            
+            if( color_matrix )
+            {
+                job->color_matrix = color_matrix;
+            }
 
             if( x264opts != NULL && *x264opts != '\0' )
             {
@@ -1510,7 +1786,7 @@ static void ShowHelp()
     fprintf( stderr,
     "Syntax: HandBrakeCLI [options] -i <device> -o <file>\n"
     "\n"
-       "### General Handbrake Options------------------------------------------------\n\n"
+    "### General Handbrake Options------------------------------------------------\n\n"
     "    -h, --help              Print help\n"
     "    -u, --update            Check for updates and exit\n"
     "    -v, --verbose <#>       Be verbose (optional argument: logging level)\n"
@@ -1521,56 +1797,44 @@ static void ShowHelp()
     "    -z, --preset-list       See a list of available built-in presets\n"
     "\n"
 
-       "### Source Options-----------------------------------------------------------\n\n"
-       "    -i, --input <string>    Set input device\n"
-       "    -t, --title <number>    Select a title to encode (0 to scan only,\n"
+    "### Source Options-----------------------------------------------------------\n\n"
+    "    -i, --input <string>    Set input device\n"
+    "    -t, --title <number>    Select a title to encode (0 to scan only,\n"
     "                            default: 1)\n"
     "    -L, --longest           Select the longest title\n"
     "    -c, --chapters <string> Select chapters (e.g. \"1-3\" for chapters\n"
     "                            1 to 3, or \"3\" for chapter 3 only,\n"
     "                            default: all chapters)\n"
-       "\n"
+    "\n"
 
-       "### Destination Options------------------------------------------------------\n\n"
+    "### Destination Options------------------------------------------------------\n\n"
     "    -o, --output <string>   Set output file name\n"
-       "    -f, --format <string>   Set output format (avi/mp4/ogm/mkv, default:\n"
+    "    -f, --format <string>   Set output format (avi/mp4/ogm/mkv, default:\n"
     "                            autodetected from file name)\n"
+    "    -m, --markers           Add chapter markers (mp4 and mkv output formats only)\n"
     "    -4, --large-file        Use 64-bit mp4 files that can hold more than\n"
-    "                            4 GB. Note: Breaks iPod, @TV, PS3 compatibility.\n"""
+    "                            4 GB. Note: Breaks iPod, PS3 compatibility.\n"""
     "    -O, --optimize          Optimize mp4 files for HTTP streaming\n"
-    "    -I, --ipod-atom         Mark mp4 files so iPods will accept them\n"
+    "    -I, --ipod-atom         Mark mp4 files so 5.5G iPods will accept them\n"
     "\n"
 
-       "### Picture Settings---------------------------------------------------------\n\n"
-    "    -w, --width <number>    Set picture width\n"
-    "    -l, --height <number>   Set picture height\n"
-    "        --crop <T:B:L:R>    Set cropping values (default: autocrop)\n"
-       "    -Y, --maxHeight <#>     Set maximum height\n"
-       "    -X, --maxWidth <#>      Set maximum width\n"
-       "    -s, --subtitle <number> Select subtitle (default: none)\n"
-    "    -U, --subtitle-scan     Scan for subtitles in an extra 1st pass, and choose\n"
-    "                            the one that's only used 10 percent of the time\n"
-    "                            or less. This should locate subtitles for short\n"
-    "                            foreign language segments. Best used in conjunction\n"
-    "                            with --subtitle-forced.\n"
-    "    -F, --subtitle-forced   Only display subtitles from the selected stream if\n"
-    "                            the subtitle has the forced flag set. May be used in\n"
-    "                            conjunction with --subtitle-scan to auto-select\n"
-    "                            a stream if it contains forced subtitles.\n"
-    "    -N, --native-language   Select subtitles with this language if it does not\n"
-    "          <string>          match the Audio language. Provide the language's\n"
-    "                            iso639-2 code (fre, eng, spa, dut, et cetera)\n"
-       "    -m, --markers           Add chapter markers (mp4 output format only)\n"
-       "\n"
 
-       "### Video Options------------------------------------------------------------\n\n"
-       "    -e, --encoder <string>  Set video library encoder (ffmpeg,xvid,\n"
+    "### Video Options------------------------------------------------------------\n\n"
+    "    -e, --encoder <string>  Set video library encoder (ffmpeg,xvid,\n"
     "                            x264,theora default: ffmpeg)\n"
-       "    -q, --quality <float>   Set video quality (0.0..1.0)\n"
-       "    -Q, --cqp               Use with -q for CQP instead of CRF\n"
+    "    -x, --x264opts <string> Specify advanced x264 options in the\n"
+    "                            same style as mencoder:\n"
+    "                            option1=value1:option2=value2\n"
+    "    -q, --quality <float>   Set video quality (0.0..1.0)\n"
+    "    -Q, --cqp               Use with -q for CQP instead of CRF\n"
     "    -S, --size <MB>         Set target size\n"
-       "    -b, --vb <kb/s>         Set video bitrate (default: 1000)\n"
-       "    -r, --rate              Set video framerate (" );
+    "    -b, --vb <kb/s>         Set video bitrate (default: 1000)\n"
+    "    -2, --two-pass          Use two-pass mode\n"
+    "    -T, --turbo             When using 2-pass use the turbo options\n"
+    "                            on the first pass to improve speed\n"
+    "                            (only works with x264, affects PSNR by about 0.05dB,\n"
+    "                            and increases first pass speed two to four times)\n"
+    "    -r, --rate              Set video framerate (" );
     for( i = 0; i < hb_video_rates_count; i++ )
     {
         fprintf( stderr, hb_video_rates[i].string );
@@ -1581,49 +1845,22 @@ static void ShowHelp()
     "                            Be aware that not specifying a framerate lets\n"
     "                            HandBrake preserve a source's time stamps,\n"
     "                            potentially creating variable framerate video\n"
-       "    -2, --two-pass          Use two-pass mode\n"
-     "    -d, --deinterlace       Deinterlace video with yadif/mcdeint filter\n"
-     "          <YM:FD:MM:QP>     (default 0:-1:-1:1)\n"
-     "           or\n"
-     "          <fast/slow/slower>\n"
-     "    -7, --deblock           Deblock video with pp7 filter\n"
-     "          <QP:M>            (default 5:2)\n"
-     "    -8, --denoise           Denoise video with hqdn3d filter\n"
-     "          <SL:SC:TL:TC>     (default 4:3:6:4.5)\n"
-     "           or\n"
-     "          <weak/medium/strong>\n"
-     "    -9, --detelecine        Detelecine (ivtc) video with pullup filter\n"
-     "                            Note: this filter drops duplicate frames to\n"
-     "                            restore the pre-telecine framerate, unless you\n"
-     "                            specify a constant framerate (--rate 29.97)\n"
-     "          <L:R:T:B:SB:MP>   (default 1:1:4:4:0:0)\n"
-     "    -5, --decomb            Selectively deinterlaces when it detects combing\n"
-     "          <MO:ME:MT:ST:BT:BX:BY>     (default: 1:2:6:9:80:16:16)\n"
-    "    -g, --grayscale         Grayscale encoding\n"
-    "    -p, --pixelratio        Store pixel aspect ratio in video stream\n"
-    "    -P, --loosePixelratio   Store pixel aspect ratio with specified width\n"
-    "          <MOD:PARX:PARY>   Takes as optional arguments what number you want\n"
-    "                            the dimensions to divide cleanly by (default 16)\n"
-    "                            and the pixel ratio to use (default autodetected)\n"
-
-
-       "\n"
-
 
-       "### Audio Options-----------------------------------------------------------\n\n"
-       "    -a, --audio <string>    Select audio channel(s), separated by commas\n"
+    "\n"
+    "### Audio Options-----------------------------------------------------------\n\n"
+    "    -a, --audio <string>    Select audio track(s), separated by commas\n"
     "                            More than one output track can be used for one\n"
     "                            input.\n"
     "                            (\"none\" for no audio, \"1,2,3\" for multiple\n"
     "                             tracks, default: first one)\n"
     "    -E, --aencoder <string> Audio encoder(s) (faac/lame/vorbis/ac3) \n"
-       "                            ac3 meaning passthrough\n"
-       "                            Seperated by commas for more than one audio track.\n"
-       "                            (default: guessed)\n"
-       "    -B, --ab <kb/s>         Set audio bitrate(s)  (default: 128)\n"
-    "                            Seperated by commas for more than one audio track.\n"
-       "    -6, --mixdown <string>  Format(s) for surround sound downmixing\n"
-    "                            Seperated by commas for more than one audio track.\n"
+    "                            ac3 meaning passthrough\n"
+    "                            Separated by commas for more than one audio track.\n"
+    "                            (default: guessed)\n"
+    "    -B, --ab <kb/s>         Set audio bitrate(s)  (default: 160)\n"
+    "                            Separated by commas for more than one audio track.\n"
+    "    -6, --mixdown <string>  Format(s) for surround sound downmixing\n"
+    "                            Separated by commas for more than one audio track.\n"
     "                            (mono/stereo/dpl1/dpl2/6ch, default: dpl2)\n"
     "    -R, --arate             Set audio samplerate(s) (" );
     for( i = 0; i < hb_audio_rates_count; i++ )
@@ -1633,26 +1870,72 @@ static void ShowHelp()
             fprintf( stderr, "/" );
     }
     fprintf( stderr, " kHz)\n"
-    "                            Seperated by commas for more than one audio track.\n"
+    "                            Separated by commas for more than one audio track.\n"
     "    -D, --drc <float>       Apply extra dynamic range compression to the audio,\n"
     "                            making soft sounds louder. Range is 1.0 to 4.0\n"
     "                            (too loud), with 1.5 - 2.5 being a useful range.\n"
-    "                            Seperated by commas for more than one audio track.\n"
-    "    -A, --aname <string>    Audio channel name(s),\n"
     "                            Separated by commas for more than one audio track.\n"
+    "    -A, --aname <string>    Audio track name(s),\n"
+    "                            Separated by commas for more than one audio track.\n"
+    "\n"
+
+    "### Picture Settings---------------------------------------------------------\n\n"
+    "    -w, --width <number>    Set picture width\n"
+    "    -l, --height <number>   Set picture height\n"
+    "        --crop <T:B:L:R>    Set cropping values (default: autocrop)\n"
+    "    -Y, --maxHeight <#>     Set maximum height\n"
+    "    -X, --maxWidth <#>      Set maximum width\n"
+    "    -p, --pixelratio        Store pixel aspect ratio in video stream\n"
+    "    -P, --loosePixelratio   Store pixel aspect ratio with specified width\n"
+    "          <MOD:PARX:PARY>   Takes as optional arguments what number you want\n"
+    "                            the dimensions to divide cleanly by (default 16)\n"
+    "                            and the pixel ratio to use (default autodetected)\n"
+    "    -M  --color-matrix      Set the color space signaled by the output\n"
+    "          <601 or 709>      (Bt.601 is mostly for SD content, Bt.709 for HD,\n"
+    "                             default: set by resolution)\n"
+    "\n"
+
+    "### Filters---------------------------------------------------------\n\n"
 
+     "    -d, --deinterlace       Deinterlace video with yadif/mcdeint filter\n"
+     "          <YM:FD:MM:QP>     (default 0:-1:-1:1)\n"
+     "           or\n"
+     "          <fast/slow/slower>\n"
+     "    -5, --decomb            Selectively deinterlaces when it detects combing\n"
+     "          <MO:ME:MT:ST:BT:BX:BY>     (default: 1:2:6:9:80:16:16)\n"
+     "    -9, --detelecine        Detelecine (ivtc) video with pullup filter\n"
+     "                            Note: this filter drops duplicate frames to\n"
+     "                            restore the pre-telecine framerate, unless you\n"
+     "                            specify a constant framerate (--rate 29.97)\n"
+     "          <L:R:T:B:SB:MP>   (default 1:1:4:4:0:0)\n"
+     "    -8, --denoise           Denoise video with hqdn3d filter\n"
+     "          <SL:SC:TL:TC>     (default 4:3:6:4.5)\n"
+     "           or\n"
+     "          <weak/medium/strong>\n"
+     "    -7, --deblock           Deblock video with pp7 filter\n"
+     "          <QP:M>            (default 5:2)\n"
+    "    -g, --grayscale         Grayscale encoding\n"
+    "\n"
 
-       "\n"
+    "### Subtitle Options------------------------------------------------------------\n\n"
+    "    -s, --subtitle <number> Select subtitle (default: none)\n"
+    "    -U, --subtitle-scan     Scan for subtitles in an extra 1st pass, and choose\n"
+    "                            the one that's only used 10 percent of the time\n"
+    "                            or less. This should locate subtitles for short\n"
+    "                            foreign language segments. Best used in conjunction\n"
+    "                            with --subtitle-forced.\n"
+    "    -F, --subtitle-forced   Only display subtitles from the selected stream if\n"
+    "                            the subtitle has the forced flag set. May be used in\n"
+    "                            conjunction with --subtitle-scan to auto-select\n"
+    "                            a stream if it contains forced subtitles.\n"
+    "    -N, --native-language   Select subtitles with this language if it does not\n"
+    "          <string>          match the Audio language. Provide the language's\n"
+    "                            iso639-2 code (fre, eng, spa, dut, et cetera)\n"
+
+
+    "\n"
 
 
-    "### Advanced Options---------------------------------------------------------\n\n"
-    "    -x, --x264opts <string> Specify advanced x264 options in the\n"
-    "                            same style as mencoder:\n"
-    "                            option1=value1:option2=value2\n"
-    "    -T, --turbo             When using 2-pass use the turbo options\n"
-    "                            on the first pass to improve speed\n"
-    "                            (only works with x264, affects PSNR by about 0.05dB,\n"
-    "                            and increases first pass speed two to four times)\n"
     );
 }
 
@@ -1661,41 +1944,55 @@ static void ShowHelp()
  ****************************************************************************/
 static void ShowPresets()
 {
-    printf("\n+ Animation:  -e x264 -b 1000 -B 160 -R 48 -E faac -f mkv --deinterlace=\"slower\" -m -p -2 -T -x ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2\n");
+    printf("\n< Apple\n");
+
+    printf("\n   + Universal:  -e x264  -q 0.589999973773956 -a 1,1 -E faac,ac3 -B 160,auto -R 48,Auto -6 dpl2,auto -f mp4 -X 720 -P -m -x level=30:cabac=0:ref=3:mixed-refs=1:analyse=all:me=umh:no-fast-pskip=1\n");
+
+    printf("\n   + AppleTV:  -e x264  -q 0.589999973773956 -a 1,1 -E faac,ac3 -B 160,auto -R 48,Auto -6 dpl2,auto -f mp4 -4 -X 960 -P -m -x level=30:cabac=0:ref=3:mixed-refs=1:bframes=6:weightb=1:direct=auto:no-fast-pskip=1:me=umh:subq=9:analyse=all\n");
+
+    printf("\n   << iPod & iPhone\n");
+
+    printf("\n      + iPod Classic & iPod Nano:  -e x264  -b 700 -a 1 -E faac -B 160 -R 48 -6 dpl2 -f mp4 -I -X 320 -m -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1\n");
 
-    printf("\n+ AppleTV:  -e x264 -b 2500 -B 160 -R 48 -E faac,ac3 -f mp4 -4 -m -p -x bframes=3:ref=1:me=umh:no-fast-pskip=1:trellis=1:cabac=0\n");
+    printf("\n      + iPhone & iPod Touch:  -e x264  -b 960 -a 1 -E faac -B 128 -R 48 -6 dpl2 -f mp4 -I -X 480 -m -x level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:trellis=1\n");
 
-    printf("\n+ Bedlam:  -e x264 -b 1800 -E ac3 -f mkv -m -p -2 -T -x ref=16:mixed-refs:bframes=16:bime:weightb:b-rdo:direct=auto:b-pyramid:me=esa:subme=7:me-range=64:analyse=all:8x8dct:trellis=1:no-fast-pskip:no-dct-decimate:filter=-2,-1\n");
+    printf("\n      + iPod Legacy:  -e x264  -b 1500 -a 1 -E faac -B 160 -R 48 -6 dpl2 -f mp4 -I -X 640 -m -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1\n");
 
-    printf("\n+ Blind:  -b 512 -B 128 -R 48 -E faac -f mp4 -w 512 -m\n");
+    printf("\n   >>\n");
 
-    printf("\n+ Broke:  -e x264 -S 695 -B 128 -R 48 -E faac -f mp4 -w 640 -m -2 -T -x ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:trellis=1:analyse=all:8x8dct:no-fast-pskip\n");
+    printf("\n   + QuickTime:  -e x264  -b 1800 -a 1 -E faac -B 160 -R Auto -6 dpl2 -f mp4 -p -m -2 -T -x ref=3:mixed-refs:bframes=3:weightb:direct=auto:me=umh:subme=7:analyse=all:8x8dct:trellis=1:no-fast-pskip=1:psy-rd=1,1\n");
 
-    printf("\n+ Classic:  -b 1000 -B 160 -R 48 -E faac -f mp4\n");
+    printf("\n>\n");
 
-    printf("\n+ Constant Quality Rate:  -e x264 -q 0.64709997177124023 -E ac3 -f mkv -m -p -x ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh\n");
+    printf("\n< Basic\n");
 
-    printf("\n+ Deux Six Quatre:  -e x264 -b 1600 -E ac3 -f mkv -m -p -2 -T -x ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subme=7:trellis=1:analyse=all:8x8dct:no-fast-pskip\n");
+    printf("\n   + Normal:  -e x264  -b 1500 -a 1 -E faac -B 160 -R Auto -6 dpl2 -f mp4 -p -m -2 -T -x ref=2:bframes=2:me=umh\n");
 
-    printf("\n+ Film:  -e x264 -b 1800 -E ac3 -f mkv -m -p -2 -T -x ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:analyse=all:8x8dct:trellis=1:no-fast-pskip\n");
+    printf("\n   + Classic:  -b 1000 -a 1 -E faac -B 160 -R Auto -6 dpl2 -f mp4\n");
 
-    printf("\n+ iPhone / iPod Touch:  -e x264 -b 960 -B 128 -R 48 -E faac -f mp4 -I -w 480 -m -x level=30:cabac=0:ref=1:analyse=all:me=umh:no-fast-pskip=1:trellis=1\n");
+    printf("\n>\n");
 
-    printf("\n+ iPod High-Rez:  -e x264 -b 1500 -B 160 -R 48 -E faac -f mp4 -I -w 640 -m -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1\n");
+    printf("\n< High Profile\n");
 
-    printf("\n+ iPod Low-Rez:  -e x264 -b 700 -B 160 -R 48 -E faac -f mp4 -I -w 320 -m -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1\n");
+    printf("\n   + Animation:  -e x264  -b 1000 -a 1 -E faac -B 160 -R Auto -6 dpl2 -f mkv --detelecine --decomb -p -m -2 -T -x ref=5:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2:psy-rd=1,1:subme=9\n");
 
-    printf("\n+ Normal:  -e x264 -b 1500 -B 160 -R 48 -E faac -f mp4 -m -p -2 -T -x ref=2:bframes=2:me=umh\n");
+    printf("\n   + Constant Quality Rate:  -e x264  -q 0.600000023841858 -a 1 -E ac3 -B 160 -R Auto -6 auto -f mkv -p -m -x ref=3:mixed-refs:bframes=3:b-pyramid:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh:subme=9:psy-rd=1,1\n");
 
-    printf("\n+ PS3:  -e x264 -b 2500 -B 160 -R 48 -E faac -f mp4 -p -x level=41:me=umh\n");
+    printf("\n   + Film:  -e x264  -b 1800 -a 1 -E ac3 -B 160 -R Auto -6 auto -f mkv -p -m -2 -T -x ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=9:analyse=all:8x8dct:trellis=1:no-fast-pskip:psy-rd=1,1\n");
 
-    printf("\n+ PSP:  -b 1024 -B 128 -R 48 -E faac -f mp4 -w 368 -l 208 -m\n");
+    printf("\n   + Television:  -e x264  -b 1300 -a 1 -E faac -B 160 -R Auto -6 dpl2 -f mkv --detelecine --decomb -p -m -2 -T -x ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=9:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip=1:psy-rd=1,1\n");
 
-    printf("\n+ QuickTime:  -e x264 -b 2000 -B 160 -R 48 -E faac -f mp4 -m -p -2 -T -x ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:analyse=all:trellis=1:no-fast-pskip\n");
+    printf("\n>\n");
 
-    printf("\n+ Television:  -e x264 -b 1300 -B 160 -R 48 -E faac -f mkv --deinterlace=\"slower\" --denoise=\"weak\" -m -2 -T -x ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip\n");
+    printf("\n< Gaming Consoles\n");
 
-    printf("\n+ Xbox 360:  -e x264 -b 2000 -B 160 -R 48 -E faac -f mp4 -p -x level=40:ref=2:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1\n");
+    printf("\n   + PSP:  -b 1024 -a 1 -E faac -B 128 -R 48 -6 dpl2 -f mp4 -X 368 -Y 208 -m\n");
+
+    printf("\n   + PS3:  -e x264  -b 2500 -a 1 -E faac -B 160 -R 48 -6 dpl2 -f mp4 --crop 0:0:0:0 -p -x level=41:me=umh\n");
+
+    printf("\n   + Xbox 360:  -e x264  -b 2000 -a 1 -E faac -B 160 -R 48 -6 dpl2 -f mp4 -p -x level=40:ref=2:mixed-refs:bframes=3:weightb:subme=9:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1\n");
+
+    printf("\n>\n");
 }
 
 /****************************************************************************
@@ -1761,6 +2058,7 @@ static int ParseOptions( int argc, char ** argv )
             { "preset-list", no_argument,       NULL,    'z' },
 
             { "aname",       required_argument, NULL,    'A' },
+            { "color-matrix",required_argument, NULL,    'M' },
 
             { 0, 0, 0, 0 }
           };
@@ -1769,7 +2067,7 @@ static int ParseOptions( int argc, char ** argv )
         int c;
 
                c = getopt_long( argc, argv,
-                                                "hv::uC:f:4i:Io:t:Lc:m::a:A:6:s:UFN:e:E:2dD:7895gpOP::w:l:n:b:q:S:B:r:R:Qx:TY:X:Z:z",
+                                                "hv::uC:f:4i:Io:t:Lc:m::M:a:A:6:s:UFN:e:E:2dD:7895gpOP::w:l:n:b:q:S:B:r:R:Qx:TY:X:Z:z",
                          long_options, &option_index );
         if( c < 0 )
         {
@@ -1815,7 +2113,7 @@ static int ParseOptions( int argc, char ** argv )
                 char *devName = bsd_name_for_path( input );
                 if( devName == NULL )
                 {
-                    return 0;
+                    break;
                 }
                 if( device_is_dvd( devName ) )
                 {
@@ -2106,7 +2404,12 @@ static int ParseOptions( int argc, char ** argv )
                     anames = strdup( optarg );
                 }
                 break;
-
+            case 'M':
+                if( atoi( optarg ) == 601 )
+                    color_matrix = 1;
+                else if( atoi( optarg ) == 709 )
+                    color_matrix = 2;
+                break;
             default:
                 fprintf( stderr, "unknown option (%s)\n", argv[optind] );
                 return -1;