// Excerpt from php/setMediaEncoder.php (3,402 lines) in the WebsiteBuilder // source: the create_gif encode operation, lines 614-665, reproduced verbatim. if($output_options->encode_media=="create_gif") { $output_gif= ".." . $settings->directory . $output_file .$output_options->format .".gif"; $docmime= checkFinfo($input_file); $doctype=explode("/",$docmime)[0]; if ($doctype!="video"){ $output_options->error_message= "We only create gifs from a video - it must be the first video in the media list."; $returnFiles = returnFiles ( $output_options, $output_file .$output_options->format . '.mp4', "video/mp4", '', null ); return $returnFiles; } $cmd = "ffmpeg -i ".$input_file." -y -vf fps=".$settings->settings->movie_frame_rate.",scale=".$settings->settings->video_width.":".$settings->settings->video_height.",palettegen palette.png 2>&1"; // $cmd = "ffmpeg -i ".$input_file." -y -vf fps=10,scale=".$settings->settings->video_width.":".$settings->settings->video_height.",palettegen palette.png 2>&1"; $result=shell_exec($cmd); $first_media=json_decode($settings->add_media)[0]; // $cmd = "ffmpeg -ss ".$first_media->add_media_start." -t ".$first_media->add_media_duration." -i ".$input_file." -i palette.png -y -filter_complex \"fps=10[x];[x][1:v]paletteuse\" ".$output_gif." "; $cmd = "ffmpeg -ss ".$first_media->add_media_start." -t ".$first_media->add_media_duration." -i ".$input_file." -i palette.png -y -filter_complex \"fps=".$settings->settings->movie_frame_rate.",scale=".$settings->settings->video_width.":".$settings->settings->video_height.":flags=lanczos[x];[x][1:v]paletteuse\" ".$output_gif." "; ffmpegMsg("ffmpeg","Creating Gif ", 0,$cmd); // $cmd_2='mogrify -delay '.$_POST['compress_gif_delay'].' -alpha remove '.$matte.' -depth '.$_POST['compress_gif_depth'].' '.$deconstruct.' '.$dither.' -colors '.$_POST['compress_gif_colors'].' -fuzz '.$_POST['compress_gif_fuzz'].'% '.$loop.' '.$optimize.' '.$path.' 2>&1'; $_POST['loop_gif']="true"; $_POST['compress_gif_matte']="false"; $_POST['compress_gif_deconstruct']="false"; $_POST['compress_gif_dither']="true"; $_POST['compress_gif_optimize']="true"; $loop=($_POST['loop_gif']=="false")?"-loop 1":""; $matte=($_POST['compress_gif_matte']=="true")?"-matte":""; $deconstruct=($_POST['compress_gif_deconstruct']=="true")?"-deconstruct":""; $dither=($_POST['compress_gif_dither']=="true")?"-dither none ":""; $optimize=($_POST['compress_gif_optimize']=="true")?"-layers optimize ":""; // $optimize=($_POST['compress_gif_optimize']=="true")?" -coalesce -layers RemoveDups ":""; $_POST['compress_gif_depth']=16; $_POST['compress_gif_delay']=0; $_POST['compress_gif_fuzz']="4"; $_POST['compress_gif_colors']="16"; $cmd_2='mogrify -delay '.$_POST['compress_gif_delay'].' -alpha remove '.$matte.' -depth '.$_POST['compress_gif_depth'].' '.$deconstruct.' '.$dither.' -colors '.$_POST['compress_gif_colors'].' -fuzz '.$_POST['compress_gif_fuzz'].'% '.$loop.' '.$optimize.' '.$output_gif.' 2>&1'; $result=shell_exec($cmd_2); $output_options->edited_url= $output_options->options->directory.$output_file .$output_options->format . '.gif'; $output_options->edited_name= $output_file .$output_options->format . '.gif'; $output_options->edited_type = "image/gif"; $output_options->edited_filetype = explode ( "/", "image/gif"); insert_document($output_options->edited_url,"image/gif",$output_options->edited_name,"image","edited"); $returnFiles = returnFiles ( $output_options, $output_file .$output_options->format . '.mp4', "video/mp4", '', null ); return $returnFiles; }