summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjbrjake <[email protected]>2007-11-09 20:04:27 +0000
committerjbrjake <[email protected]>2007-11-09 20:04:27 +0000
commit4edc73cc1d426444a952cd9e10d6e139333eaded (patch)
treea5a97e5a7f1725af4eda5db93b0dcb587ad8fd36
parent61f77b9e58ed651b61417eb97003186763ae5f67 (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.c306
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;