ゆう's Blog
レンタルサーバー(シンフリーサーバー)でFFmpegを利用する

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_64amd64
i686 / i386i686
aarch64arm64
armv7larmhf
armv6larmel(または 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 に依存するのは避けるべきです。