I have using ffmpeg for generating thumbnail from video.it's working fine in local host.but not generated in online, it just throw "sh: ffmpeg: command not found".
I have check the ffmpeg.exe, and also given video file path, and image destination path..what's wrong with me..
$ffmpeg="ffmpeg.exe";
//time to take screenshot at
$interval1 = 2;
//screenshot size
$size = '320x240';
$cmd1 = "$ffmpeg -i $video -deinterlace -an -ss $interval1 -f mjpeg -t 1 -r 1 -y -s $size $image1 2>&1";
This happened to me once. I have solved this by specifying the actual path to the ffmpeg executable. Again ffmpeg.exe is for windows platform. But your error message seems like you are on linux platform.
If you are on linux platform, simply specifying the path to ffmpeg executable ( Mostly in /usr/local/bin/ffmpeg ) will solve the issue.
If you are using a windows server make sure the path to the ffmpeg.exe is correct. I cant find anything wrong in this code.
If yo uare linux, this answer is worth looking at sh: ffmpeg: command not found when run command through php
Related
So I have this executable working fine in a Windows 10 dev environment:
$cmd = 'C:/ffmpeg/bin/ffmpeg.exe -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4';
exec($cmd, $output)
However when I move it into the Ubuntu staging environment and change the path to:
/usr/bin/ffmpeg
there is no response from it.
The following works in the ubuntu terminal
ffmpeg -v, ffmpeg -i, php -v, ...
but there is no response from it from inside php.
Am I missing something here?
I've also tried adding sudo to the above command which seems to make no difference.
(Yes I know I should be developing in the same environment as the staging/prod servers but it's not an option in this specific case).
I have installed ffmpeg and path is correct, because when i go to convert mp4 video to mp3, it works. here is its code.
shell_exec('/home/pakunit/ffmpeg/ffmpeg -i newfile.mp4 output4.mp3');
even this code is also works for cut a video from mp4 to mp4 using this code
shell_exec("/home/pakunit/ffmpeg/ffmpeg -i newfile.mp4 -ss 00:00:00 -t 00:00:10 -async 1 -c copy cut.mp4");
and when I use mostly other commands, no command works, Like i want to create video thumbnail and i am using this code.
shell_exec("/home/pakunit/ffmpeg/ffmpeg -i newfile.mp4 -an -ss 5 -s 120x90 thumbnail.jpg")
but its not working. also i tried many codes and command for creating thumbnail, but not working any of them. even i used the exact same command that is on ffmpeg.org original website
shell_exec("/home/pakunit/ffmpeg/ffmpeg -i newfile.mp4 -vf thumbnail,scale=300:200 -frames:v 1 out.png");
Is any extension missed in hosting? or any special extension or module we need to enable from hosting? there is also ffmpeg enabled in PHP extension, but not showing in phpinfo(); Please help. thanks
I have installed successfully installed FFMpeg on root of my Centos 6 machine (https://trac.ffmpeg.org/wiki/CompilationGuide/Centos).
My workplace of apache/php is /var/www/html
Now I'm running below command successfully on /var/www/html directory to capture frame from the video file. It's capturing a frame.
[root#localhost html]# ffmpeg -i video.mpg -an -ss 30 -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg -s 160x100 frame8 2>&1
I want to run this command through php and using shell_exec() or exec() php functions. My php code for running the command is:
$cmd = "/root/bin/ffmpeg -i /project/app/webroot/videos/video.mpg -ss 00:00:14.435 -f image2 -vframes 1 /project/app/webroot/videothumbnails/example-thumb.jpg";
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo shell_exec($cmd);
When I'm trying to run command through above php code, I'm getting below error:
sh: ffmpeg: command not found
Please help me to solve out this problem.
For Video Thumbnail creation we use ffmpeg.
In Linux Systems(centos 6.x) Ffmpeg installation process and Php example:-
This process is done in my centos 6 and created thumbnails using php.
Step1:- Please check If any existing ffmpeg available or not in your linux server .If available please remove that files.
Step2:- For New ffmpeg installation follow this link
http://root.uabid.com/compile-ffmpeg-on-centos-6-x/ .
Step3:- After installation complete check whereis your ffmpeg installed.
Command: whereis ffmpeg
type this command in linux command line and check.If for example your ffmpeg path in (/usr/local/bin/ffmpeg).
Use this path in your code.
Php Example:-
<?php
if($extension === 'mp4' OR $extension == 'MP4' )
{
$video = $timestamp.$imagename;
$videoname=substr($imagename,0, -4).$timestamp;
$image = "sites/default/files/content_images/{$videoname}-thumb.jpg";
var_dump($video);
$cmd = "/usr/local/bin/ffmpeg -i /opt/lampp/htdocs/myproject/sites/default/files/content_videos/".$video." -ss 00:00:01.435 -f image2 -vframes 1 /opt/lampp/htdocs/myproject/sites/default/files/content_images/".$videoname."- thumb.jpg";
$cmdstr = $cmd;
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo exec($cmd);
?>
Process 2:-
This is for static file paths:
<?php
$cmd = "/root/bin/ffmpeg -i /var/www/html/project/app/webroot/videos/example.mp4 -ss 00:00:01.435 -f image2 -vframes 1 /var/www/html/project/app/webroot/videothumbnails/example-thumb.jpg";
$cmdstr = $cmd;
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo exec($cmd);
?>
Hope this helps to you & others..
Try using which to locate the ffmpeg binary. At least on Ubuntu/Debian based Linuxes the which command should be available by default. which returns the file path to the preferred executable of any available application. E.g. which php should return the PHP installation executable that is used by default for CLI operations. Therefore which ffmpeg should return the system default location for the ffmpeg installation.
<?php
// shell_exec returns the command output or null on error/empty output.
$ffmpeg_path = shell_exec('which ffmpeg');
if ($ffmpeg_path != null) {
shell_exec($ffmpeg_path . ' -i file.mpg --snip--');
}
Also make sure that the Linux user running the PHP script has access to ffmpeg (e.g. $ chmod +x ffmpeg). If $ sudo which ffmpeg returns a path but $ which ffmpeg doesn't, try reinstalling ffmpeg for the wanted user or play around with the permissions.
EDIT: use care with which though, there's no knowing whether a cracker could replace the ffmpeg executable with something malicious (which leads to the above PHP script running the wrong executable).
I've seen this problem. For me 'command not found' may be the $PATH variable problem.
When run this command through php and using shell_exec() or exec() php functions, you may use different $PATH variable compare with running command in linux directory.
For example, the /usr/local/php/etc/vhostphp-fpm.conf for my php project is below:
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
env[LD_LIBRARY_PATH] = /usr/local/lib
but ffmpeg command locates in /data/bin directory. My Linux's $PATH variable contain the /data/bin.
So add /data/bin to env[PATH] variable above can solve the problem.
I have a strange situation that has just happend. FFMPEG is no longer executing from PHP but will from the command line.
Here is exactly what the command is:
ffmpeg -i ../../uploads/ee78d5deb564901626067cc0008456ed.mp3 -ab 96k -y ../../uploads/mp3/ee78d5deb564901626067cc0008456ed_6203688.mp3
How it is executed in the PHP script:
if(! exec("ffmpeg -i ".$target_path."".$hash_filename.".".$path_extension." -ab 96k -y ".$target_path."mp3/".$hash_filename."_".$session_ID.".mp3")){
echo 'ffmpeg failed';
}
This command did work but not longer does. I have recently updated plesk but I highly doubt that has affected this. The only thing that I think could affect it that I have recently done is have the file upload go to a subdomain. So the directory where the file is located and stored in the command is in a directory outside the document root. However, the move_uploaded_file function works and I have altered the open_basedir in PHP ini to the webspace root.
tail -f /var/log/apache2/error_log
and lets us know what you see there...Adjust for your platform...
this is for lamp (opensuse )
You can try the system() command. It will return you the response from server
system("ffmpeg -i ".$target_path."".$hash_filename.".".$path_extension." -ab 96k -y ".$target_path."mp3/".$hash_filename."_".$session_ID.".mp3")
if the ffmpeg is not supported with current version of the php it will return you the error.
OR
you can modify your command to get ffmpeg with proper path. In my case it works like below code
exec("/usr/local/bin/ffmpeg -i ".$target_path."".$hash_filename.".".$path_extension." -ab 96k -y ".$target_path."mp3/".$hash_filename."_".$session_ID.".mp3"))
I have installed ffmpeg on my server and it works fine via my terminal. I'm able to successfully convert a file to webm format, so I'm sure the installation is fine. I'm also sure that I only have one installation of ffmpeg installed on my machine.
A problem arises when I try to convert files through PHP via PHP's exec(). When I run the same commands, I ran in the terminal, nothing happens. I looked around stackoverflow and other parts of the net for some help. I tried this to see the output:
exec($cmd, $out, $rv);
echo "output is:\n".implode("\n", $out)."\n exit code:$rv\n";
The output is: "output is: exit code:127"
The command I'm using is in this format:
ffmpeg -i "sample.mov" -vcodec libvpx -r 30 -b "644k" -acodec libvorbis -ab 128000 -ar "44100" -ac 2 -s "352x198" "sample.webm"
I've tried replacing "ffmpeg" with the full path to FFmpeg but that did not work.
Why isn't the script running the command correctly and converting the files?
Thank you!
Error code 127 means the executable (ffmpeg) couldn't be found. Try specifying the whole path (you can that out find in your terminal with which ffmpeg) or compare the value of the PATH environment variable in your php script and terminal.
I have similar problem with ant target executions from php. I can't get whole output from ant command only first few rows and ant target was not executed. In other words is partial executed.
With bellow command I've managed to run it but output of the command is append to log_file.log.
$commandString = 'you_command_here >> log_file.log 2>&1 &';
$command = exec($commandString);
Hope this will work for you.