make size configurable
This commit is contained in:
parent
55d9c94887
commit
76aa1345e7
1 changed files with 25 additions and 3 deletions
28
pack-vid
28
pack-vid
|
@ -11,12 +11,17 @@
|
||||||
|
|
||||||
$args = $_SERVER['argv'];
|
$args = $_SERVER['argv'];
|
||||||
$self = array_shift( $args );
|
$self = array_shift( $args );
|
||||||
|
|
||||||
|
$maxBytes = 4000 * 1000; // fit in 4MB
|
||||||
|
$maxBytes = $maxBytes * 7 / 8; // leave some headroom
|
||||||
|
|
||||||
$options = [
|
$options = [
|
||||||
'letterbox' => false,
|
'letterbox' => false,
|
||||||
'audio' => false,
|
'audio' => false,
|
||||||
'exposure' => '0',
|
'exposure' => '0',
|
||||||
'peak' => '10000',
|
'peak' => '10000',
|
||||||
'fps' => '60',
|
'fps' => '60',
|
||||||
|
'size' => $maxBytes,
|
||||||
];
|
];
|
||||||
|
|
||||||
while ( count( $args ) > 0 && substr( $args[0], 0, 2 ) == '--' ) {
|
while ( count( $args ) > 0 && substr( $args[0], 0, 2 ) == '--' ) {
|
||||||
|
@ -38,7 +43,8 @@ if ( count ( $args ) < 2 ) {
|
||||||
" --audio include audio\n" .
|
" --audio include audio\n" .
|
||||||
" --exposure=n adjust exposure\n" .
|
" --exposure=n adjust exposure\n" .
|
||||||
" --peak=n set HDR peak nits\n" .
|
" --peak=n set HDR peak nits\n" .
|
||||||
" --fps=n set frame rate\n"
|
" --fps=n frame rate limit\n" .
|
||||||
|
" --size=n target file size in bytes (default 3.5M)\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
[ $src, $dest ] = $args;
|
[ $src, $dest ] = $args;
|
||||||
|
@ -91,9 +97,25 @@ function evenize( $n ) {
|
||||||
return $n;
|
return $n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sizify( $str ) {
|
||||||
|
$matches = [];
|
||||||
|
if ( preg_match( '/^(\d+(?:\.\d+)?)([kmgt]?)$/i', $str, $matches ) ) {
|
||||||
|
[ , $digits, $suffix ] = $matches;
|
||||||
|
$n = floatval( $digits );
|
||||||
|
switch ( strtolower( $suffix ) ) {
|
||||||
|
case 't': $n *= 1000; // fall through
|
||||||
|
case 'g': $n *= 1000; // fall through
|
||||||
|
case 'm': $n *= 1000; // fall through
|
||||||
|
case 'k': $n *= 1000; // fall through
|
||||||
|
default: return $n;
|
||||||
|
}
|
||||||
|
return $n;
|
||||||
|
}
|
||||||
|
die( "Unexpected size format '$str'\n" );
|
||||||
|
}
|
||||||
|
|
||||||
function convert( $src, $dest, $options ) {
|
function convert( $src, $dest, $options ) {
|
||||||
$maxBits = 4000 * 1000 * 8; // fit in 4Mb
|
$maxBits = 8 * sizify( $options['size'] );
|
||||||
$maxBits = $maxBits * 7 / 8; // leave some headroom
|
|
||||||
|
|
||||||
$probe = ffprobe( $src );
|
$probe = ffprobe( $src );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue