From 9c69552c192e67484d62a20aea277fa85fa31753 Mon Sep 17 00:00:00 2001 From: Daniel Neto Date: Thu, 16 Jan 2025 13:11:33 -0300 Subject: [PATCH] Now the MP4 and MP3 files if is automatic, is processed In the encoder for HLS files only --- objects/Encoder.php | 2 +- objects/Format.php | 2 +- objects/HLSProcessor.php | 28 ++++++++++++++ objects/MP3Processor.php | 33 +++++++++++++++++ objects/MP4Processor.php | 79 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 objects/MP3Processor.php create mode 100644 objects/MP4Processor.php diff --git a/objects/Encoder.php b/objects/Encoder.php index 9d0b5e16..9116a2d5 100644 --- a/objects/Encoder.php +++ b/objects/Encoder.php @@ -1259,7 +1259,7 @@ static function canEncodeNow() public static function run($try = 0) { - global $global; + global $global, $advancedCustom; $maxTries = 4; $lockFile = sys_get_temp_dir() . '/encoder_run.lock'; diff --git a/objects/Format.php b/objects/Format.php index 8e689135..bc2f1fd5 100644 --- a/objects/Format.php +++ b/objects/Format.php @@ -113,7 +113,7 @@ protected static function getFromOrder($order) } return $row; } - + public function run($pathFileName, $encoder_queue_id) { _error_log("AVideo-Encoder Format::run($pathFileName, $encoder_queue_id) " . json_encode(debug_backtrace())); diff --git a/objects/HLSProcessor.php b/objects/HLSProcessor.php index 705a713b..1cacf91d 100644 --- a/objects/HLSProcessor.php +++ b/objects/HLSProcessor.php @@ -2,6 +2,32 @@ class HLSProcessor { + + static function createMP3AndPM4IfNeed($pathFileName, $destinationFile){ + global $global; + + $advancedCustom = getAdvancedCustomizedObjectData(); + //_error_log('createMP3AndPM4IfNeed '.json_encode($advancedCustom)); + if($advancedCustom->autoConvertToMp4){ + require_once __DIR__.'/MP4Processor.php'; + try { + MP4Processor::createMP4($pathFileName, $destinationFile.'index.mp4'); + } catch (Exception $e) { + _error_log("Error creating MP4: " . $e->getMessage()); + } + + } + if($advancedCustom->autoConvertVideosToMP3){ + require_once __DIR__.'/MP3Processor.php'; + // Usage example + try { + MP3Processor::createMP3($pathFileName, $destinationFile.'index.mp3'); + } catch (Exception $e) { + _error_log("Error creating MP3: " . $e->getMessage()); + } + } + } + public static function createHLSWithAudioTracks($pathFileName, $destinationFile) { // Detect video resolution and audio tracks @@ -44,6 +70,8 @@ public static function createHLSWithAudioTracks($pathFileName, $destinationFile) $masterPlaylist = "#EXTM3U" . PHP_EOL; $masterPlaylist .= "#EXT-X-VERSION:3" . PHP_EOL; + self::createMP3AndPM4IfNeed($pathFileName, $destinationFile); + // Generate separate audio-only HLS streams for each audio track foreach ($audioTracks as $key => $track) { $language = isset($track->language) ? $track->language : "lang" . ($track->index + 1); // Assign language name, customize as needed diff --git a/objects/MP3Processor.php b/objects/MP3Processor.php new file mode 100644 index 00000000..7153d0e2 --- /dev/null +++ b/objects/MP3Processor.php @@ -0,0 +1,33 @@ += $resolution) { + return $resolution; + } + } + + // Return the lowest resolution if no match found + return $allowedResolutions[count($allowedResolutions) - 1] ?? null; + } + + private static function generateFFmpegCommand($inputFile, $outputFile, $resolution, $encodingSettings) + { + $ffmpeg = get_ffmpeg() . " -i $inputFile " . + "-vf scale=-2:$resolution " . + "-b:v {$encodingSettings['maxrate']}k " . + "-minrate {$encodingSettings['minrate']}k " . + "-maxrate {$encodingSettings['maxrate']}k " . + "-bufsize {$encodingSettings['bufsize']}k " . + "-c:v h264 -pix_fmt yuv420p " . + "-c:a aac -b:a {$encodingSettings['audioBitrate']}k " . + "-movflags +faststart " . + "$outputFile"; + + return removeUserAgentIfNotURL($ffmpeg); + } +} \ No newline at end of file