ffmpegを使ってみたので自分の為のメモ

●目的
・動画の変換をWEBサービスとして実現する
・携帯電話各キャリアの動画を相互変換する

●環境
・サーバー:FreeBSD
・テスト動画:MPEGを携帯サイズに合わせて作成(60秒)
・テスト方法:
MPEGをFTPにてWindowsよりUpload
telnetクライアントにてコマンド手打ち
各キャリア向け動画(変換後)をFTPにてDownload
Windows上の動画再生ソフト(携帯用動画対応)にて再生

※環境はFreeBSDなのでInstallにはportsを使用
他の環境ではapt-getなりを使う

●ffmpegインストール
/usr/ports/multimedia/ffmpegにて「make install
・パラメータは「IPv6」サポートを除く全てを指定(念のため)
AMR_NB、AMR_WB、FAAC、FAAD、GSM、LAME、LIBA52、OPTIMIZED_CFLAGS、SDL、THEORA、VORBIS、X264、XVID
・FAAC、FAAD、GSM、LAME、X264にてエラーとなる
今回使用したffmpeのバージョンが求める各ライブラリが、defaultのサーバーに無く、FTPで取得できないため
なんとか探しだし、/usr/ports/distfilesへ突っ込んで解決

●php-ffmpegインストール
・必須では無いものの、あると便利なのでインストール
/usr/ports/graphics/php5-ffmpegにて「make install
/usr/local/etc/php/extensions.iniへ「extension=ffmpeg.so」を追記
(もしかしたらmakeで自動追記かも)

●Gpac(MP4Box)インストール
/usr/ports/multimedia/gpac-mp4boxにて「make install
・携帯電話の動画であるMpeg4には管理部分(Atom/ボックス)があり、ここを弄る必要があるので、このツールを使う
詳しいことはこのあたり
・動画の結合/分割もコイツでできるので便利

●メールライブラリ(qd_mail&qd_mail_recieve)
・特に無くてもできるが、これがあるとメールの送受信がらくになる(特に添付ファイル)
こことかここあたり

●動画変換
今回投入したコマンドは下記の通り

ffmpeg -y -i INPUTFILE -fs 500000 -vcodec mpeg4 -bitexact -fixaspect -s 176×144 -r 14.985 -b 64k -acodec libfaac -ac 1 -ar 8000 -ab 32k -f 3gp TEMPFILE

-y:同名ファイルがあっても上書き
-i:入力ファイル名指定
-fs:出力ファイルサイズ(byte)
-vcodec:動画codec
-bitexact:アルゴリズムの最適化(?詳細不明)
-fixaspec:アスペクト比固定
-s:動画サイズ(横幅x高さ)
-r:フレームレート
-b:ビットレート
-acodec:音声codec
-ac:音声チャネル指定(1=モノラル)
-ar:音声サンプリングレート
-ab:音声ビットレート
-f:強制画像形式指定

上記では出力ファイルサイズを指定しているが、無くても良い
docomo=500KB、SoftBank=300KB、AU=1.5MBを守れるようにする
幅広く機種をサポートするならば、動画ビットレートは64k、音声は32kだと良いかも
(各レートを調整しつつ、元動画の長さを考慮し決めるべき?)

docomoとAUは同じ指定でOK(上記のファイルサイズのみの違い)
SoftBankだけは音声codecを「libamr_nb」とし、ビットレートは「12.2k」とする
(docomoやAUのACCのcodec指定も「ibfaac」なことに注意)

その他、開始位置や終了位置、ノイズリダクションなんかもあるようだが、今回は未使用
コーデック名はバージョンにより異なるので注意が必要

上記だけでは、イマイチ不完全なので、MP4Boxを実行

mp4box -quiet -add TEMPFILE -brand mmp4:1 -new OUTPUTFILE
mp4box -quiet -add TEMPFILE -brand kddi:1 -ab 3g2a -new OUTPUTFILE

docomoとSoftBankは前者の3gppパターン、AUのみ後者の3gpp2パターンとする

●おまけ1(動画分割)

mp4box -split 30(秒指定)
mp4box -splits 500000(バイト指定)

●おまけ2(動画からサムネイル)
$mov = new ffmpeg_movie(INPUTFILE);
$frm = $mov->getFrame(15);
$img = $mov->toGDImage();
// imagejpeg($img,OUTPUTFILE,100) など画像処理
imageDestroy($img);

●付属処理(メール処理)
各ライブラリはincludeのみで利用可能

$server = array(
‘protocol’=>’pop3’,
‘host’=>’SERVERNAME‘,
‘user’=>’USERNAME‘,
‘pass’=>’PASSWORD‘,
);
$receiver = QdmailReceiver::start(‘pop’,$server);

上記で初期化後は、ライブラリの利用が可能

$cnt = $receiver->count();
for($loop=1 ; $loop<=$max ; $loop++){
$subject = $receiver->header(array(‘subject’,’name’),’none’);
$body = $receiver->bodyAutoSelect();
$attach = $receiver->attach();
:     :
$receiver->delete($receiver->pointer());
$receiver->next();
}

のように受信処理が可能

$subject = “XXXXXXXX”;
$body = “YYYYYYYYYYYYYYYYYYYYYY”;
qd_send_mail(‘text’,TOADDRESS,$subject,$body,FROMADDRESS);

のように送信が可能


No comments yet.

コメント投稿

※各記事(エントリー/投稿)の内容は投稿時のものです。閲覧時とは異なることがございますのでご了承ください。