Instructions on installing libmp3lame-enabled ffmpeg on shared linux hosting
12th March 2008
Note: this post is based on the comment by Simon, who generously shared his experience.
Step-by-step:
- Download the compiled ffmpeg with libmp3lame support (direct download links: older version ffmpeg.with.lame and newer version ffmpeg.2007-10-28.with-libmp3lame-support).
- Rename the downloaded executable file to “ffmpeg” (no extension), upload it to the directory on your server (in this example /home/myusername/).
- Download libmp3lame.so.0.
- Upload libmp3lame.so.0 to the same directory where you placed ffmpeg in.
- Create a php file with the following code (remember to change the paths to your own, where you actually uploaded binaries in previous steps):
- <?php
- exec("export LD_LIBRARY_PATH=/home/myusername/");
- echo passthru("/home/myusername/ffmpeg -formats");
- ?>
- If you access that PHP file with your browser, you should be able to see a list of formats which are supported by ffmpeg, and if you find “EA libmp3lame” somewhere in the output, then it means you now can Encode Audio in libmp3lame!
- If that doesn’t work for you: LD_LIBRARY_PATH can be a protected variable in PHP (you can check for this by searching for the “safe_mode_protected_env_vars” value in phpinfo() output). The workaround here can be to write your commands to a file from php, then chmod that file with 0755 permissions (rwx-rx-rx), and run the file through exec(). In this way, PHP is not changing the LD_LIBRARY_PATH, but telling the server to run a file, which tells the server to change it. This method worked for the original author of these instructions.
For passing arguments to the PHP wrapper script – check out PHP’s $argv variable (more on this here). If you decided to use shell-script as a wrapper for “export LD_LIBRARY_PATH”, then using $1, $2 etc will allow you to pass parameters to the shell script, e.g. in the example below
- #!/bin/bash
- export LD_LIBRARY_PATH=/home/myusername/
- /home/myusername/ffmpeg -i /home/myusername/$1 $2 /home/myusername/$3
you could pass “input file” as first argument, “parameters” as second and “output file” as third to make such a wrapper script work.
Posted in *nix, PHP, Programming, Software, Web | 19 Comments »
