Chrisj Posted August 27, 2018 Share Posted August 27, 2018 (edited) The php web video script that I'm using, has ffmpeg, and it uploads videos succesfully. I'm trying to add the ability to add a watermark onto the video upon upload. However, what I've added -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' shows N ERROR: Media error: Format(s) not supported or sources not found mejs.download-file: https://…com/upload/videos/2018/08/6SWCpSImGQrsVXGgIh7A_24_549ebe0d36bccb10faf72b81e303ce50_video_360p_converted.mp4 mejs.download-file: https://…com/upload/videos/2018/08/Ubud1OqKHK7MPjvtbHw5_24_cdab9c4bc2a4eccc7c478526abb530d8_video_240p_converted.mp4 Any suggestion/solution will be appreciated. Here's the entire file code: <?php if (IS_LOGGED == false || $pt->config->upload_system != 'on') { $data = array( 'status' => 400, 'error' => 'Not logged in' ); echo json_encode($data); exit(); } else if ($pt->config->ffmpeg_system != 'on') { $data = array( 'status' => 402 ); echo json_encode($data); exit(); } else { $getID3 = new getID3; $featured = ($user->is_pro == 1) ? 1 : 0; $filesize = 0; $error = false; $request = array(); $request[] = (empty($_POST['title']) || empty($_POST['description'])); $request[] = (empty($_POST['tags']) || empty($_POST['video-thumnail'])); if (in_array(true, $request)) { $error = $lang->please_check_details; } else if (empty($_POST['video-location'])) { $error = $lang->video_not_found_please_try_again; } else { $request = array(); $request[] = (!in_array($_POST['video-location'], $_SESSION['uploads']['videos'])); $request[] = (!in_array($_POST['video-thumnail'], $_SESSION['uploads']['images'])); $request[] = (!file_exists($_POST['video-location'])); if (in_array(true, $request)) { $error = $lang->error_msg; } } if (empty($error)) { $file = $getID3->analyze($_POST['video-location']); $duration = '00:00'; if (!empty($file['playtime_string'])) { $duration = PT_Secure($file['playtime_string']); } if (!empty($file['filesize'])) { $filesize = $file['filesize']; } $video_res = (!empty($file['video']['resolution_x'])) ? $file['video']['resolution_x'] : 0; $video_id = PT_GenerateKey(15, 15); $check_for_video = $db->where('video_id', $video_id)->getValue(T_VIDEOS, 'count(*)'); if ($check_for_video > 0) { $video_id = PT_GenerateKey(15, 15); } $thumbnail = PT_Secure($_POST['video-thumnail'], 0); if (file_exists($thumbnail)) { $upload = PT_UploadToS3($thumbnail); } $category_id = 0; $convert = true; $thumbnail = substr($thumbnail, strpos($thumbnail, "upload"), 120); if (!empty($_POST['category_id'])) { if (in_array($_POST['category_id'], array_keys($categories))) { $category_id = PT_Secure($_POST['category_id']); } } $link_regex = '/(http\:\/\/|https\:\/\/|www\.)([^\ ]+)/i'; $i = 0; preg_match_all($link_regex, PT_Secure($_POST['description']), $matches); foreach ($matches[0] as $match) { $match_url = strip_tags($match); $syntax = '[a]' . urlencode($match_url) . '[/a]'; $_POST['description'] = str_replace($match, $syntax, $_POST['description']); } $video_privacy = 0; if (!empty($_POST['privacy'])) { if (in_array($_POST['privacy'], array(0, 1, 2))) { $video_privacy = PT_Secure($_POST['privacy']); } } $age_restriction = 1; if (!empty($_POST['age_restriction'])) { if (in_array($_POST['age_restriction'], array(1, 2))) { $age_restriction = PT_Secure($_POST['age_restriction']); } } $data_insert = array( 'video_id' => $video_id, 'user_id' => $user->id, 'title' => PT_Secure($_POST['title']), 'description' => PT_Secure($_POST['description']), 'tags' => PT_Secure($_POST['tags']), 'duration' => $duration, 'video_location' => '', 'category_id' => $category_id, 'thumbnail' => $thumbnail, 'time' => time(), 'registered' => date('Y') . '/' . intval(date('m')), 'featured' => $featured, 'converted' => '2', 'size' => $filesize, 'privacy' => $video_privacy, 'age_restriction' => $age_restriction ); if ($pt->config->approve_videos == 'on' && !PT_IsAdmin()) { $data_insert['approved'] = 0; } $insert = $db->insert(T_VIDEOS, $data_insert); if ($insert) { $data = array( 'status' => 200, 'video_id' => $video_id, 'link' => PT_Link("watch/$video_id") ); ob_end_clean(); header("Content-Encoding: none"); header("Connection: close"); ignore_user_abort(); ob_start(); header('Content-Type: application/json'); echo json_encode($data); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); session_write_close(); if (is_callable('fastcgi_finish_request')) { fastcgi_finish_request(); } $ffmpeg_b = $pt->config->ffmpeg_binary_file; $filepath = explode('.', $_POST['video-location'])[0]; $time = time(); $full_dir = str_replace('ajax', '/', __DIR__); $video_output_full_path_240 = $full_dir . $filepath . "_240p_converted.mp4"; $video_output_full_path_360 = $full_dir . $filepath . "_360p_converted.mp4"; $video_output_full_path_480 = $full_dir . $filepath . "_480p_converted.mp4"; $video_output_full_path_720 = $full_dir . $filepath . "_720p_converted.mp4"; $video_output_full_path_1080 = $full_dir . $filepath . "_1080p_converted.mp4"; $video_output_full_path_2048 = $full_dir . $filepath . "_2048p_converted.mp4"; $video_output_full_path_4096 = $full_dir . $filepath . "_4096p_converted.mp4"; $video_file_full_path = $full_dir . $_POST['video-location']; $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=426:-2 -crf 26 $video_output_full_path_240 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_240p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( 'converted' => 1, '240p' => 1, 'video_location' => $filepath . "_240p_converted.mp4" )); if ($video_res >= 640 || $video_res == 0) { $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=640:-2 -crf 26 $video_output_full_path_360 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_360p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '360p' => 1, )); } if ($video_res >= 854 || $video_res == 0) { $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=854:-2 -crf 26 $video_output_full_path_480 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_480p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '480p' => 1 )); } if ($video_res >= 1280 || $video_res == 0) { $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=1280:-2 -crf 26 $video_output_full_path_720 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_720p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '720p' => 1 )); } if ($video_res >= 1920 || $video_res == 0) { $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=1920:-2 -crf 26 $video_output_full_path_1080 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_1080p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '1080p' => 1 )); } if ($video_res >= 2048) { $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=2048:-2 -crf 26 $video_output_full_path_2048 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_2048p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '2048p' => 1 )); } if ($video_res >= 3840) { $shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=3840:-2 -crf 26 $video_output_full_path_4096 2>&1"); $upload_s3 = PT_UploadToS3($filepath . "_4096p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '4096p' => 1 )); } if (file_exists($_POST['video-location'])) { unlink($_POST['video-location']); } if (!empty($_SESSION['uploads']['images'])) { if (is_array($_SESSION['uploads']['images'])) { foreach ($_SESSION['uploads']['images'] as $key => $file) { if ($thumbnail == $file) { unset($_SESSION['uploads']['images'][$key]); } else { //@unlink($file); } } $_SESSION['uploads']['images'] = array(); } } pt_push_channel_notifiations($video_id); $_SESSION['uploads'] = array(); exit(); } } else { $data = array( 'status' => 400, 'message' => $error_icon . $error ); } } Edited August 27, 2018 by Chrisj Quote Link to comment Share on other sites More sharing options...
requinix Posted August 27, 2018 Share Posted August 27, 2018 The command seems right. If the video file wasn't created then ffmpeg probably had a problem. And it would have said something in its output. Have you looked at the $shell output from one of the failing commands for a clue? Quote Link to comment Share on other sites More sharing options...
Chrisj Posted August 27, 2018 Author Share Posted August 27, 2018 Thanks for your reply/insight. Can you direct me as to how/where I might "look at the $shell output from one of the failing commands for a clue?", please? Quote Link to comment Share on other sites More sharing options...
requinix Posted August 27, 2018 Share Posted August 27, 2018 $shell has the output from the command. Do whatever you have to do in order to see what its value is. Perhaps by collecting all the results into an array of values that you can output later on in the script - which I say because it seems this may be called through AJAX. Or log it somewhere. Whatever means you have at your disposal. Quote Link to comment Share on other sites More sharing options...
Chrisj Posted August 27, 2018 Author Share Posted August 27, 2018 Thanks, yes that file is: ../ajax/ffmpeg-submit.php but I don't know how to "to see what its value is" any guidance or example will be appreciated Quote Link to comment Share on other sites More sharing options...
requinix Posted August 27, 2018 Share Posted August 27, 2018 Okay, fine then. error_log($shell) and check your PHP error log. Quote Link to comment Share on other sites More sharing options...
Chrisj Posted August 27, 2018 Author Share Posted August 27, 2018 Thanks for that. I'm not sure how to do that. Does this look correct? if ($video_res >= 854 || $video_res == 0) { error_log($shell = shell_exec("$ffmpeg_b -y -i $video_file_full_path -i /home/user/public_html/watermark.jpg -filter_complex 'overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2' -vcodec libx264 -preset {$pt->config->convert_speed} -filter:v scale=854:-2 -crf 26 $video_output_full_path_480 2>&1")); $upload_s3 = PT_UploadToS3($filepath . "_480p_converted.mp4"); $db->where('id', $insert); $db->update(T_VIDEOS, array( '480p' => 1 )); } Quote Link to comment Share on other sites More sharing options...
requinix Posted August 28, 2018 Share Posted August 28, 2018 Does it work? Are the videos are generated or not? Is there anything in your error log? Quote Link to comment Share on other sites More sharing options...
Chrisj Posted August 28, 2018 Author Share Posted August 28, 2018 Thanks for your reply. So, I added the error log code correctly? No, videos are generated. The last entry in the error_log file is from Aug-16. Any additional guidance will be welcomed. Much thanks again Quote Link to comment Share on other sites More sharing options...
requinix Posted August 28, 2018 Share Posted August 28, 2018 Are all the video files there? All the ones you expect? And you're still getting the error message? Exactly what and where is the message coming from? Because it's starting to sound like that isn't a message you're getting from PHP. Quote Link to comment Share on other sites More sharing options...
Chrisj Posted August 28, 2018 Author Share Posted August 28, 2018 Thanks again for your reply. No, the videos don't upload with the added part to watermark the video: -i /home/user/public_html/watermark.png -filter_complex 'overlay=10:10' without that, the videos upload successfully. The Media Error shown on my original posting, appears over the video player on the web page. It may not be a message from PHP, it may be a message from ffmpeg Any additional help will be appreciated Quote Link to comment Share on other sites More sharing options...
requinix Posted August 28, 2018 Share Posted August 28, 2018 No, that message is coming from the video player. I know that's where it is coming from because that's where it is coming from. Trying to create the overlay is causing ffmpeg to not generate the video. It would have given some sort of output to explain why. Let's try something else. Grab one of the videos that isn't working, copy the command being executed (remembering to replace variable values appropriately), and run that command manually. On your server, on your computer, wherever. Either ffmpeg will create the video or it will give error messages. Quote Link to comment Share on other sites More sharing options...
Chrisj Posted August 28, 2018 Author Share Posted August 28, 2018 Got it. Thanks again for your help Quote Link to comment Share on other sites More sharing options...
gizmola Posted August 29, 2018 Share Posted August 29, 2018 Did you determine the problem? If so, what was it? If you are still encountering an error, let us know the error message you received when running ffmpeg from the command line. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.