1)SSH 接続をしてサーバーを確認
SSH 接続をする
$ ssh -p 10022 ユーザー名@サーバー(ホスト名)
PATH を確認
~]$ echo $PATH /usr/lib/courier-imap/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ユーザー名/.composer/vendor/bin:/home/ユーザー名/bin
/home/ユーザー名/bin が存在しなかったので、bin ディレクトリを作成しました。
~]$ mkdir bin
CPU アーキテクチャを確認
~]$ uname -m x86_64
| uname -m の結果 | 選ぶべきファイル |
|---|---|
| x86_64 | amd64 |
| i686 / i386 | i686 |
| aarch64 | arm64 |
| armv7l | armhf |
| armv6l | armel(または armhf) |
2)「ファイルを置くだけで実行できる(=インストール不要のスタンドアロン版)」FFmpeg をダウンロードし、解凍。
そして、その中の ffmpeg と ffprobe を /home/ユーザー名/bin へ移動。
~]$ cd /tmp tmp]$ curl -LO https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz tmp]$ tar xf ffmpeg-release-amd64-static.tar.xz tmp]$ mv ffmpeg-x.x.x-amd64-static/ffmpeg /home/ユーザー名/bin/ tmp]$ mv ffmpeg-x.x.x-amd64-static/ffprobe /home/ユーザー名/bin/
パーミッションは、bin ディレクトリ,ffmpeg と ffprobe すべて 755 になっています。
3)確認
]$ ffmpeg -version
※ シェルでは PATH に入るが、PHP(Apache / php-fpm)では PATH に入らないので、PHP exec() から ffmpeg を呼ぶときには、絶対パスで ffmpeg を呼ぶ。
$cmd = sprintf( '/home/ユーザー名/bin/ffmpeg -y -i %s -vf %s -vframes 1 %s 2>&1', escapeshellarg($input), escapeshellarg('crop=100:100'), escapeshellarg($temp) );
※ ちなみに、PHP が実際にどの PATH を使っているかは下記で確認できます。
<?php exec('echo $PATH', $out); var_dump($out);
但し、絶対パス指定が最も安全で、PATH に依存するのは避けるべきです。