vbitrate: output bitrate (kbps)
pass: 0, 1 or 2
vrate, vrate_base: output framerate is vrate / vrate_base
- h264_level: boolean for whether or not we're encoding for iPod
- crf: boolean for whether to use constant rate factor with x264
- x264opts: string of extra x264 options
- areBframes: boolean to note if b-frames are included in x264opts */
+ h264_level: boolean for whether or not we're encoding for iPod
+ crf: boolean for whether to use constant rate factor with x264
+ x264opts: string of extra x264 options
+ areBframes: boolean to note if b-frames are included in x264opts */
#define HB_VCODEC_MASK 0x0000FF
#define HB_VCODEC_FFMPEG 0x000001
#define HB_VCODEC_XVID 0x000002
int vrate_base;
int pass;
int h264_13;
- int h264_level;
- int crf;
- char *x264opts;
- int areBframes;
-
+ int h264_level;
+ int crf;
+ char *x264opts;
+ int areBframes;
+
/* Audio tracks:
audios: Indexes in hb_title_t's audios list, starting from 0.
-1 indicates the end of the list
- audio_mixdowns: The mixdown to be used for each audio track in audios[] */
+ audio_mixdowns: The mixdown to be used for each audio track in audios[] */
/* define some masks, used to extract the various information from the HB_AMIXDOWN_XXXX values */
#define HB_AMIXDOWN_DCA_FORMAT_MASK 0x00FFF000
int mux;
const char * file;
+ /* Allow MP4 files > 4 gigs */
+ int largeFileSize;
+
+
int subtitle_scan;
hb_subtitle_t ** select_subtitle;
char * native_language;
/* Create an empty mp4 file */
- m->file = MP4Create( job->file, MP4_DETAILS_ERROR, 0 );
+ if (job->largeFileSize)
+ /* Use 64-bit MP4 file */
+ {
+ m->file = MP4Create( job->file, MP4_DETAILS_ERROR, MP4_CREATE_64BIT_DATA );
+ hb_log("Using 64-bit MP4 formatting.");
+ }
+ else
+ /* Limit MP4s to less than 4 GB */
+ {
+ m->file = MP4Create( job->file, MP4_DETAILS_ERROR, 0 );
+ }
+
if (m->file == MP4_INVALID_FILE_HANDLE)
{
hb_log("muxmp4.c: MP4Create failed!");
static int maxWidth = 0;
static int turbo_opts_enabled = 0;
static char * turbo_opts = "no-fast-pskip=0:subme=1:me=dia:trellis=0:analyse=none";
+static int largeFileSize = 0;
/* Exit cleanly on Ctrl-C */
static volatile int die = 0;
{
job->mux = mux;
}
+
+ if ( largeFileSize )
+ {
+ job->largeFileSize = 1;
+ }
+
job->file = strdup( output );
if( crf )
" -o, --output <string> Set output file name\n"
" -f, --format <string> Set output format (avi/mp4/ogm, default:\n"
" autodetected from file name)\n"
+ " -4, --large-file Use 64-bit mp4 files that can hold more than\n"
+ " 4 GB. Note: Breaks iPod, @TV, PS3 compatibility.\n"""
"\n"
"### Picture Settings---------------------------------------------------------\n\n"
{ "format", required_argument, NULL, 'f' },
{ "input", required_argument, NULL, 'i' },
{ "output", required_argument, NULL, 'o' },
-
+ { "large-file", no_argument, NULL, '4' },
+
{ "title", required_argument, NULL, 't' },
{ "longest", no_argument, NULL, 'L' },
{ "chapters", required_argument, NULL, 'c' },
int c;
c = getopt_long( argc, argv,
- "hvuC:f:i:o:t:Lc:ma:6:s:UN:e:E:2dgpw:l:n:b:q:S:B:r:R:Qx:TY:X:",
+ "hvuC:f:4i:o:t:Lc:ma:6:s:UN:e:E:2dgpw:l:n:b:q:S:B:r:R:Qx:TY:X:",
long_options, &option_index );
if( c < 0 )
{
case 'o':
output = strdup( optarg );
break;
-
+ case '4':
+ largeFileSize = 1;
+ break;
case 't':
titleindex = atoi( optarg );
break;