diff options
author | jbrjake <[email protected]> | 2007-11-09 20:04:27 +0000 |
---|---|---|
committer | jbrjake <[email protected]> | 2007-11-09 20:04:27 +0000 |
commit | 4edc73cc1d426444a952cd9e10d6e139333eaded (patch) | |
tree | a5a97e5a7f1725af4eda5db93b0dcb587ad8fd36 | |
parent | 61f77b9e58ed651b61417eb97003186763ae5f67 (diff) |
First attempt at built-in presets in the CLI.
Works like so:
-Z "Preset Name"
or
--preset "Preset Name"
See a list of all presets and their CLI equivalents (useful for wrappers) this way:
-z
or
--preset-list
Any commands the user adds in addition to in and out locations override that part of the preset. File name extensions are ignored, so if you title the output movie.mp4 but use the Film preset, it will come out as an mkv with an .mp4 extension.
I've also gone and moved where x264opts get duplicated for a 2nd pass, to work better with this system.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1049 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r-- | test/test.c | 306 |
1 files changed, 302 insertions, 4 deletions
diff --git a/test/test.c b/test/test.c index 45ccc03f3..4ddefdfdb 100644 --- a/test/test.c +++ b/test/test.c @@ -67,6 +67,8 @@ static int maxWidth = 0; static int turbo_opts_enabled = 0; static char * turbo_opts = "ref=1:subme=1:me=dia:analyse=none:trellis=0:no-fast-pskip=0:8x8dct=0"; static int largeFileSize = 0; +static int preset = 0; +static char * preset_name = 0; /* Exit cleanly on Ctrl-C */ static volatile int die = 0; @@ -75,6 +77,8 @@ static void SigHandler( int ); /* Utils */ static void ShowCommands(); static void ShowHelp(); +static void ShowPresets(); + static int ParseOptions( int argc, char ** argv ); static int CheckOptions( int argc, char ** argv ); static int HandleEvents( hb_handle_t * h ); @@ -223,6 +227,7 @@ int main( int argc, char ** argv ) if (native_language ) free (native_language ); if( x264opts ) free (x264opts ); if( x264opts2 ) free (x264opts2 ); + if (preset_name) free (preset_name); fprintf( stderr, "HandBrake has exited.\n" ); @@ -391,6 +396,245 @@ static int HandleEvents( hb_handle_t * h ) job->chapter_end ); } + if (preset) + { + hb_log("+ Using preset: %s", preset_name); + + if (!strcmp(preset_name, "Animation")) + { + mux = HB_MUX_MKV; + vcodec = HB_VCODEC_X264; + job->vbitrate = 1000; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + x264opts = strdup("ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2"); + job->chapter_markers = 1; + job->deinterlace = 1; + pixelratio = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + + if (!strcmp(preset_name, "AppleTV")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->vbitrate = 2500; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + x264opts = strdup("bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2:cabac=0"); + job->chapter_markers = 1; + pixelratio = 1; + } + + if (!strcmp(preset_name, "Bedlam")) + { + mux = HB_MUX_MKV; + vcodec = HB_VCODEC_X264; + job->vbitrate = 1800; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_AC3; + x264opts = strdup("ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1"); + job->chapter_markers = 1; + pixelratio = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + + if (!strcmp(preset_name, "Blind")) + { + mux = HB_MUX_MP4; + job->vbitrate = 512; + job->abitrate = 128; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + job->width = 512; + job->chapter_markers = 1; + } + + if (!strcmp(preset_name, "Broke")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + size = 695; + job->abitrate = 128; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + job->width = 640; + x264opts = strdup("ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip"); + job->chapter_markers = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + + if (!strcmp(preset_name, "Classic")) + { + mux = HB_MUX_MP4; + job->vbitrate = 1000; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + } + + if (!strcmp(preset_name, "Constant Quality Rate")) + { + mux = HB_MUX_MKV; + vcodec = HB_VCODEC_X264; + job->vquality = 0.64709997177124023; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_AC3; + x264opts = strdup("ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh"); + job->chapter_markers = 1; + pixelratio = 1; + } + + if (!strcmp(preset_name, "Deux Six Quatre")) + { + mux = HB_MUX_MKV; + vcodec = HB_VCODEC_X264; + job->vbitrate = 1600; + job->abitrate = 160; + job->arate = 48000; + 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")) + { + mux = HB_MUX_MKV; + vcodec = HB_VCODEC_X264; + job->vbitrate = 2000; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_AC3; + x264opts = strdup("ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip"); + job->chapter_markers = 1; + pixelratio = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + + if (!strcmp(preset_name, "iPhone")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->h264_level = 30; + job->vbitrate = 960; + job->abitrate = 128; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + job->width = 480; + x264opts = strdup("cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1"); + job->chapter_markers = 1; + } + + if (!strcmp(preset_name, "iPod High-Rez")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->h264_level = 30; + job->vbitrate = 1500; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + job->width = 640; + x264opts = strdup("keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1"); + job->chapter_markers = 1; + } + + if (!strcmp(preset_name, "iPod Low-Rez")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->h264_level = 30; + job->vbitrate = 700; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + job->width = 320; + x264opts = strdup("keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1"); + job->chapter_markers = 1; + } + + if (!strcmp(preset_name, "Normal")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->vbitrate = 1500; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + x264opts = strdup("ref=2:bframes=2:subme=5:me=umh"); + job->chapter_markers = 1; + pixelratio = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + + if (!strcmp(preset_name, "PS3")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->vbitrate = 2500; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + x264opts = strdup("level=41:subme=5:me=umh"); + job->chapter_markers = 1; + pixelratio = 1; + } + + if (!strcmp(preset_name, "PSP")) + { + mux = HB_MUX_MP4; + job->vbitrate = 1024; + job->abitrate = 128; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + job->width = 368; + job->height = 208; + job->chapter_markers = 1; + } + + if (!strcmp(preset_name, "QuickTime")) + { + mux = HB_MUX_MP4; + vcodec = HB_VCODEC_X264; + job->vbitrate = 2000; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + x264opts = strdup("ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip"); + job->chapter_markers = 1; + pixelratio = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + + if (!strcmp(preset_name, "Television")) + { + mux = HB_MUX_MKV; + vcodec = HB_VCODEC_X264; + job->vbitrate = 1300; + job->abitrate = 160; + job->arate = 48000; + acodec = HB_ACODEC_FAAC; + x264opts = strdup("ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip"); + job->chapter_markers = 1; + job->deinterlace = 1; + twoPass = 1; + turbo_opts_enabled = 1; + } + } + if ( chapter_markers ) { job->chapter_markers = chapter_markers; @@ -681,6 +925,11 @@ static int HandleEvents( hb_handle_t * h ) job->pass = 1; job->indepth_scan = 0; + + if (x264opts) + { + x264opts2 = strdup(x264opts); + } /* * If turbo options have been selected then append them @@ -939,6 +1188,47 @@ static void ShowHelp() } /**************************************************************************** + * ShowPresets: + ****************************************************************************/ +static void ShowPresets() +{ + printf("\n+ Animation: -e x264 -b 1000 -B 160 -R 48 -E faac -f mkv -m -d -p -2 -T -x ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=5:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2\n"); + + printf("\n+ AppleTV: -e x264 -b 2500 -B 160 -R 48 -E faac -f mp4 -m -p -x bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2:cabac=0\n"); + + printf("\n+ Bedlam: -e x264 -b 1800 -B 160 -R 48 -E ac3 -f mkv -m -p -2 -T -x ref=16:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=7:me-range=64:analyse=all:8x8dct:trellis=2:no-fast-pskip:no-dct-decimate:filter=-2,-1\n"); + + printf("\n+ Blind: -b 512 -B 128 -R 48 -E faac -f mp4 -w 512 -m\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=6:bime:weightb:b-rdo:b-pyramid:direct=auto:me=umh:subme=6:trellis=1:analyse=all:8x8dct:no-fast-pskip\n"); + + printf("\n+ Classic: -b 1000 -B 160 -R 48 -E faac -f mp4\n"); + + printf("\n+ Constant Quality Rate: -e x264 -q 0.64709997177124023 -B 160 -R 48 -E ac3 -f mkv -m -p -x ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-1:subme=6:trellis=1:analyse=all:8x8dct:me=umh\n"); + + printf("\n+ Deux Six Quatre: -e x264 -b 1600 -B 160 -R 48 -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+ Film: -e x264 -b 2000 -B 160 -R 48 -E ac3 -f mkv -m -p -2 -T -x ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:no-fast-pskip\n"); + + printf("\n+ iPhone: -e x264b30 -b 960 -B 128 -R 48 -E faac -f mp4 -w 480 -m -x cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:trellis=1\n"); + + printf("\n+ iPod High-Rez: -e x264b30 -b 1500 -B 160 -R 48 -E faac -f mp4 -w 640 -m -x keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1\n"); + + printf("\n+ iPod Low-Rez: -e x264b30 -b 700 -B 160 -R 48 -E faac -f mp4 -w 320 -m -x keyint=300:keyint-min=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:subme=6:no-fast-pskip=1\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:subme=5:me=umh\n"); + + printf("\n+ PS3: -e x264 -b 2500 -B 160 -R 48 -E faac -f mp4 -m -p -x level=41:subme=5:me=umh\n"); + + printf("\n+ PSP: -b 1024 -B 128 -R 48 -E faac -f mp4 -w 368 -l 208 -m\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:subme=5:analyse=all:8x8dct:trellis=1:no-fast-pskip\n"); + + printf("\n+ Television: -e x264 -b 1300 -B 160 -R 48 -E faac -f mkv -m -d -2 -T -x ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=umh:subme=6:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip\n"); + +} + +/**************************************************************************** * ParseOptions: ****************************************************************************/ static int ParseOptions( int argc, char ** argv ) @@ -991,9 +1281,10 @@ static int ParseOptions( int argc, char ** argv ) { "crf", no_argument, NULL, 'Q' }, { "x264opts", required_argument, NULL, 'x' }, { "turbo", no_argument, NULL, 'T' }, - { "maxHeight", required_argument, NULL, 'Y' }, { "maxWidth", required_argument, NULL, 'X' }, + { "preset", required_argument, NULL, 'Z' }, + { "preset-list", no_argument, NULL, 'z' }, { 0, 0, 0, 0 } }; @@ -1002,7 +1293,7 @@ static int ParseOptions( int argc, char ** argv ) int c; c = getopt_long( argc, argv, - "hvuC:f:4i:o:t:Lc:ma:6:s:UFN:e:E:2d789gpP::w:l:n:b:q:S:B:r:R:Qx:TY:X:", + "hvuC:f:4i:o:t:Lc:ma:6:s:UFN:e:E:2d789gpP::w:l:n:b:q:S:B:r:R:Qx:TY:X:Z:z", long_options, &option_index ); if( c < 0 ) { @@ -1023,7 +1314,15 @@ static int ParseOptions( int argc, char ** argv ) case 'C': cpu = atoi( optarg ); break; - + + case 'Z': + preset = 1; + preset_name = strdup(optarg); + break; + case 'z': + ShowPresets(); + exit ( 0 ); + case 'f': format = strdup( optarg ); break; @@ -1304,7 +1603,6 @@ static int ParseOptions( int argc, char ** argv ) break; case 'x': x264opts = strdup( optarg ); - x264opts2 = strdup( optarg ); break; case 'T': turbo_opts_enabled = 1; |