/** * ffmpeg2Theora mapping is much simpler since it is the basis of the the firefogg API */ function ffmpeg2TheoraEncode( $options){ global $wgFFmpeg2theoraLocation; // Set up the base command $cmd = wfEscapeShellArg( $wgFFmpeg2theoraLocation ) . ' ' . wfEscapeShellArg( $this->getSourceFilePath() ); $file = wfLocalFile( $this->title ); if( isset( $options['maxSize'] ) ){ list( $width, $height ) = WebVideoTranscode::getMaxSizeTransform( $file, $options['maxSize'] ); $options['width'] = $width; $options['height'] = $height; $options['aspect'] = $width . ':' . $height; unset( $options['maxSize'] ); } // Add in the encode settings foreach( $options as $key => $val ){ if( isset( self::$foggMap[$key] ) ){ if( is_array( self::$foggMap[$key] ) ){ $cmd.= ' '. implode(' ', WebVideoTranscode::$foggMap[$key] ); } elseif ($val == 'true' || $val === true){ $cmd.= ' '. self::$foggMap[$key]; } elseif ( $val === false){ //ignore "false" flags } else { //normal get/set value $cmd.= ' '. self::$foggMap[$key] . ' ' . wfEscapeShellArg( $val ); } } } // Add the output target: $cmd.= ' -o ' . wfEscapeShellArg ( $this->getTargetEncodePath() ); $this->output( "Running cmd: \n\n" .$cmd . "\n" ); wfProfileIn( 'ffmpeg2theora_encode' ); $retval = 0; $shellOutput = $this->runShellExec( $cmd, $retval ); wfProfileOut( 'ffmpeg2theora_encode' ); if( $retval != 0 ){ return $cmd . "\n\n" . $shellOutput; } return true; }
/** * Get derivative "source" attributes */ static public function getDerivativeSourceAttributes($file, $transcodeKey, $options = array() ){ $dataPrefix = in_array( 'nodata', $options )? '': 'data-'; $fileName = $file->getTitle()->getDbKey(); $thumbName = $file->thumbName( array() ); $thumbUrl = $file->getThumbUrl( $thumbName ); $thumbUrlDir = dirname( $thumbUrl ); list( $width, $height ) = WebVideoTranscode::getMaxSizeTransform( $file, self::$derivativeSettings[$transcodeKey]['maxSize'] ); $framerate = ( isset( self::$derivativeSettings[$transcodeKey]['framerate'] ) )? self::$derivativeSettings[$transcodeKey]['framerate'] : $file->getHandler()->getFramerate( $file ); // Setup the url src: $src = $thumbUrlDir . '/' .$file->getName() . '.' . $transcodeKey; $src = in_array( 'fullurl', $options)? wfExpandUrl( $src ) : $src; return array( 'src' => $src, 'title' => wfMsg('timedmedia-derivative-desc-' . $transcodeKey ), "{$dataPrefix}shorttitle" => wfMsg('timedmedia-derivative-' . $transcodeKey), // Add data attributes per emerging DASH / webTV adaptive streaming attributes // eventually we will define a manifest xml entry point. "{$dataPrefix}width" => $width, "{$dataPrefix}height" => $height, // a "ready" transcode should have a bitrate: "{$dataPrefix}bandwidth" => self::$transcodeState[$fileName][ $transcodeKey ]['final_bitrate'], "{$dataPrefix}framerate" => $framerate, ); }
/** * Get target popup player size */ function getPopupPlayerSize(){ // Get the max width from the enabled transcode settings: $maxImageSize = WebVideoTranscode::getMaxSizeWebStream(); return WebVideoTranscode::getMaxSizeTransform( $this->file, $maxImageSize); }