From a20e33785f987a3ec0fd828ac5ad80d9b1d710fa Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 Sep 2010 13:45:49 -0400 Subject: [PATCH] Initial commit of NoFFMPEG. --- modules/noffmpeg/helpers/movie.php | 137 ++++++++++++++++++ .../noffmpeg/images/missing_movie - Copy.png | Bin 0 -> 8474 bytes modules/noffmpeg/images/missing_movie.png | Bin 0 -> 8228 bytes modules/noffmpeg/module.info | 3 + 4 files changed, 140 insertions(+) create mode 100644 modules/noffmpeg/helpers/movie.php create mode 100644 modules/noffmpeg/images/missing_movie - Copy.png create mode 100644 modules/noffmpeg/images/missing_movie.png create mode 100644 modules/noffmpeg/module.info diff --git a/modules/noffmpeg/helpers/movie.php b/modules/noffmpeg/helpers/movie.php new file mode 100644 index 00000000..801796b8 --- /dev/null +++ b/modules/noffmpeg/helpers/movie.php @@ -0,0 +1,137 @@ +id", "", "post", array("id" => "g-edit-movie-form")); + $form->hidden("from_id")->value($movie->id); + $group = $form->group("edit_item")->label(t("Edit Movie")); + $group->input("title")->label(t("Title"))->value($movie->title) + ->error_messages("required", t("You must provide a title")) + ->error_messages("length", t("Your title is too long")); + $group->textarea("description")->label(t("Description"))->value($movie->description); + $group->input("name")->label(t("Filename"))->value($movie->name) + ->error_messages( + "conflict", t("There is already a movie, photo or album with this name")) + ->error_messages("no_slashes", t("The movie name can't contain a \"/\"")) + ->error_messages("no_trailing_period", t("The movie name can't end in \".\"")) + ->error_messages("illegal_data_file_extension", t("You cannot change the movie file extension")) + ->error_messages("required", t("You must provide a movie file name")) + ->error_messages("length", t("Your movie file name is too long")); + $group->input("slug")->label(t("Internet Address"))->value($movie->slug) + ->error_messages( + "conflict", t("There is already a movie, photo or album with this internet address")) + ->error_messages( + "not_url_safe", + t("The internet address should contain only letters, numbers, hyphens and underscores")) + ->error_messages("required", t("You must provide an internet address")) + ->error_messages("length", t("Your internet address is too long")); + + module::event("item_edit_form", $movie, $form); + + $group = $form->group("buttons")->label(""); + $group->submit("")->value(t("Modify")); + + return $form; + } + + static function extract_frame($input_file, $output_file) { + $ffmpeg = self::find_ffmpeg(); + if (empty($ffmpeg)) { + // BEGIN rWatcher Edit. + copy(MODPATH . "noffmpeg/images/missing_movie.png", $output_file); + //throw new Exception("@todo MISSING_FFMPEG"); + // END rWatcher Edit. + } + + $cmd = escapeshellcmd($ffmpeg) . " -i " . escapeshellarg($input_file) . + " -an -ss 00:00:03 -an -r 1 -vframes 1" . + " -y -f mjpeg " . escapeshellarg($output_file) . " 2>&1"; + exec($cmd); + + clearstatcache(); // use $filename parameter when PHP_version is 5.3+ + if (filesize($output_file) == 0) { + // Maybe the movie is shorter, fall back to the first frame. + $cmd = escapeshellcmd($ffmpeg) . " -i " . escapeshellarg($input_file) . + " -an -an -r 1 -vframes 1" . + " -y -f mjpeg " . escapeshellarg($output_file) . " 2>&1"; + exec($cmd); + + clearstatcache(); + if (filesize($output_file) == 0) { + throw new Exception("@todo FFMPEG_FAILED"); + } + } + } + + static function find_ffmpeg() { + if (!($ffmpeg_path = module::get_var("gallery", "ffmpeg_path")) || !file_exists($ffmpeg_path)) { + $graphics_path = module::get_var("gallery", "graphics_toolkit_path", null); + + putenv("PATH=" . getenv("PATH") . (empty($graphics_path) ? "" : ":$graphics_path") . + ":/usr/local/bin:/opt/local/bin:/opt/bin"); + if (function_exists("exec")) { + $ffmpeg_path = exec("which ffmpeg"); + } + + module::set_var("gallery", "ffmpeg_path", $ffmpeg_path); + } + return $ffmpeg_path; + } + + + /** + * Return the width, height, mime_type and extension of the given movie file. + */ + static function get_file_metadata($file_path) { + $ffmpeg = self::find_ffmpeg(); + if (empty($ffmpeg)) { + // BEGIN rWatcher Edit. + $pi = pathinfo($file_path); + $extension = isset($pi["extension"]) ? $pi["extension"] : "flv"; // No extension? Assume FLV. + $mime_type = in_array(strtolower($extension), array("mp4", "m4v")) ? + "video/mp4" : "video/x-flv"; + return array(320, 240, $mime_type, $extension); + //throw new Exception("@todo MISSING_FFMPEG"); + // END rWatcher Edit. + } + + $cmd = escapeshellcmd($ffmpeg) . " -i " . escapeshellarg($file_path) . " 2>&1"; + $result = `$cmd`; + if (preg_match("/Stream.*?Video:.*?(\d+)x(\d+)/", $result, $regs)) { + list ($width, $height) = array($regs[1], $regs[2]); + } else { + list ($width, $height) = array(0, 0); + } + + $pi = pathinfo($file_path); + $extension = isset($pi["extension"]) ? $pi["extension"] : "flv"; // No extension? Assume FLV. + $mime_type = in_array(strtolower($extension), array("mp4", "m4v")) ? + "video/mp4" : "video/x-flv"; + + return array($width, $height, $mime_type, $extension); + } + +} diff --git a/modules/noffmpeg/images/missing_movie - Copy.png b/modules/noffmpeg/images/missing_movie - Copy.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc97779a64dc9d872d8c882f85f80dd54a99ae5 GIT binary patch literal 8474 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 z zJf5en%$s)w{^QEx#S8v%|3g&VetGDj4?L$9%zK#s@Okqde)!=};Bnvk-uJ%37576Q zxIbk-TTeq$$%^C>8A+8Z)29V_T4h(GBx^=77`Z!yxR5 literal 0 HcmV?d00001 diff --git a/modules/noffmpeg/module.info b/modules/noffmpeg/module.info new file mode 100644 index 00000000..c11f0853 --- /dev/null +++ b/modules/noffmpeg/module.info @@ -0,0 +1,3 @@ +name = "NoFFMPEG" +description = "Allow video uploads on systems without FFMPEG." +version = 1