2010年7月17日土曜日

ffmpegのオプション設定 実際の変換結果

CentOS5.5にfmpegをインストールして、実際に変換を行ってみた。
Webに掲載するため、FLVへの変換試験です。

FFmpegのバージョン

FFmpeg version 0.5.2
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
元動画(Canon5DMarkⅡのフルハイビジョン映像)
ファイル名:test.mov
コーデック名:H264
フレームレート:30
再生時間:50s
ビットレート:40,309,193
幅:1920
高:1088
音声コーデック:pcm_s16le
音声ビットレート:44100
ファイルの大きさ:256MB
FFmpegのオプション設定
  • -i」 インプットファイルを指定
  • -b」 変換ビットレートを指定、1000kb/s とkb/sを明示的に指定しないといけなかった。
  • -t」 50秒を全てエンコすると膨大な時間を要するので、「-t」オプションで 「20」を指定し、最初から20秒間をエンコすることにする。
  • -s」 また、フルハイビジョンでWeb上に公開することは無いと思われるので、「-s」オプションで「640x360」を指定した。
  • -ar」 音声ビットレートは明示的に「-ar」で「44100」を指定した。
  • -y」 出力ファイルの上書き指定
Test1 1Pass 4000kb/s
ffmpeg -i test.mov -b 4000kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -y test_640_4000kb_1pass.flv
Test2 1Pass 2500kb/s

ffmpeg -i test.mov -b 2500kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -y test_640_2500kb_1pass.flv
Test31Pass 1400kb/s
ffmpeg -i test.mov -b 1400kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -y test_640_1400kb_1pass.flv
Test4 1Pass 800kb/s

ffmpeg -i test.mov -b 800kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -y test_640_800kb_1pass.flv

Test5 2Pass 4000kb/s

ffmpeg -i test.mov -b 4000kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -pass 2 -passlogfile log -y ta_640_4000kb_2pass.flv

Test6 2Pass 2500kb/s

ffmpeg -i test.mov -b 2500kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -pass 2 -passlogfile log -y test_640_2500kb_2pass.flv

Test7 2Pass 1400kb/s

ffmpeg -i test.mov -b 1400kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -pass 2 -passlogfile log -y ta_640_1400kb_2pass.flv

Test8 2Pass 800kb/s

ffmpeg -i test.mov -b 800kb/s -t 20 -s 640x360 -mbd rd -g 20 -ar 44100 -pass 2 -passlogfile log -y ta_640_800kb_2pass.flv



結果・考察


----------Test1   Test2  Test3   Test4  Test5  Test6  Test7  Test8
Pass      1     1     1     1     2     2     2     2
BitRate   4000   2500   1400   800   4000   2500   1400   800
大きさ   10.25MB 6.52MB 3.78MB 2.07MB 10.25MB 6.45MB 3.59MB 1.97MB
画質     ++++   +++    +++    +    ++++   +++    +++    +

  • 元画質が良ければ、1Pass も 2Pass も遜色無いし、出力ファイルの大きさにも差が無い
  • 2500kb/sと1400kb/sでは、差があまり見られなかった。1280x 720の場合には差が見られるようだ。
  • 800kb/sまでビットレートを落とすと明らかに画質が低下した。
  • 今回の試験の結果、1Pass、1200-1500kb/sで変換していこうと思う。
FFmpegのオプションは、沢山ありすぎて、まだまだ検討の余地はあると思うが、それよりも、バージョンの違いにより、指定方法が違ったりするのが困ったものだ。

2010年7月16日金曜日

XOOPS Cubeにログインできなくなった。あせりまくり!!

表題のとおり自宅サーバーでサイト運営しているXOOPS Cubeにログイン出来なくなりました。

久しぶりにメンテしようとログインすると、

****さん、ようこそ。ログイン中です
と一瞬表示されるがその後
このエリアへのアクセスは許可されていません。
などと表示されログイン画面に戻ってしまう。

昨年まで運用していたサイトは、メインページがPHPの手書きで、日記などは海外由来のBlogを使用していました。セキュリティー的には殆んどノーガードだったと思います。
そのBlogを殆んどメンテ無しでそのまま放置していたため、ある日、乗っ取られてしまい、ファイルが改ざんされてしまいました。それ以来、システム全体のセキュリティーを強化しようと模索し現在に至っているわけですが、またヤラレタカ!青くなった次第です。

Googleで調べていると、多くの方が同じような症状になっているようですね。
どうも データベースXOOPSのセッションテーブルがおかしくなっているみたいです。
これを、修復してやると直るみたい。
変な悪戯をされた事ではなさそうです、一安心!

早速、ローカルでphpMyaAminを開き、該当テーブルを確認、やはりエラーが出ています。
コンソールからログイン、MySQLにログイン、続けてXOOPSのデーターベースに接続、そしてリペアーして回復。


実際の手順は・・・
[user@centos ~]# mysql -u root -p
Enter password:   ←パスワード入力
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 28411
Server version: 5.xx Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| iptablelog |
| mysql |
| snort_log |
| xoops |    ←これが目的のデーターベース
+--------------------+
4 rows in set (0.00 sec)

mysql> use xoops
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> show tables;
+-------------------------------------+
| Tables_in_xoops |
+-------------------------------------+
| b3defd_altsys_language_constants |
| b3defd_pico_categories |
| b3defd_pico_category_permissions |
| b3defd_pico_content_extras |
| b3defd_pico_content_histories |
| b3defd_pico_content_votes |
| b3defd_pico_contents |
| b3defd_pico_tags |
------------ 中略 --------------
| b3defd_protector_access |
| b3defd_protector_log |
| b3defd_ranks |
| b3defd_session |  ←これが目的のテーブル
| b3defd_smiles |
| b3defd_user_mailjob |
| b3defd_user_mailjob_link |
| b3defd_users |
| b3defd_xoopscomments |
| b3defd_xoopsnotifications |
| search |
+-------------------------------------+
121 rows in set (0.01 sec)

mysql> REPAIR TABLE `b3defd_session`;
+--------------------------+--------+----------+------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+------------------------------------------+
| xoops.b3defd_session | repair | warning | Number of rows changed from 1683 to 1685 |
| xoops.b3defd_session | repair | status | OK |
+--------------------------+--------+----------+------------------------------------------+
2 rows in set (0.03 sec)
これで、修復されました。
早速、phpMyAdminで確認してみると、修復されているようです。次に、ブラウザでログインしてみるとチャンとログインできました。

2010/07/19 追記
データベースのリペアーを行うコマンド「REPAIR TABLE `b3defd_session`;」の「`」が「'」とは違う。
完全に「'」と思っていたため、エラーばかり出てしまう。よくよく見てみると、「`」だった。思い込みは失敗を呼びます。反省!
  • '」  quote、single quote、apostrophe
  • `」  grave mark、reverse single quote、spacing grave accent、back apostrophe
2010/07/26 追記
データベースのチェックと修復についてもう少し詳しく調べてみた。
MySQLのマニュアルから
そのものずばり参考になったサイトとして

Sync A World You Want To Explore

phpmyadmin上からの修復
もっと簡単にphpmyadmin上から修復出来るはずだと思っていましたが、やはり出来ました。
これまで、phpmyadminは使ったことが無かったので調べることもしていなかった。
  • phpmyadminにログイン
  • 該当のデータベースを選択
  • テーブル一覧の下「すべてをチェックする」でチェックする
  • テーブル一覧の下「チェックしたものを:」の「テーブルをチェックする」を選択
  • エラーテーブルをチェックする
  • テーブル一覧の下「チェックしたものを:」の「テーブルを修復する」を選択
以上で終了

2010年7月8日木曜日

ffmpegのオプション設定 動画変換編

映像を他形式へ変換する

MobileHackerz Knowledgebase Wiki を参考に設定してみた。

ffmpeg -i input_file -mbd 1 -g 20 -ar 44100 -y output_file
オプションの説明
  • -i <filename>  インプットファイル名を指定する
  • -mbd <mode>  マクロブロックのモードを決定 : Default = 0
  • -g <gop_size>  GOP(Group Of Picture)のサイズをフレーム数で指定する : Default = 12
  • -ar <rate>  サンプリング周波数 (in Hz)
  • -y   同名ファイルがあった場合アウトプットファイルを上書きする
  • output_file 出力ファイル(拡張子で出力形式を判断しています)
注意点
もう少しトライしてみないと分からない・・・

ffmpegのオプション設定 サムネイル画像編

映像からサムネイル画像を取り出す

MobileHackerz Knowledgebase Wiki を参考に設定してみた。

ffmpeg  -ss  5  -i  input_fil-s  140x100  -f  image2  -vframes  1  -y  output_file
オプションの説明
  • -ss <time_off>  変換開始時間をセットする(hh:mm:ss.ms 又は、s)
  • -i <filename>  インプットファイル名を指定する
  • -s <size>    フレームサイズの設定(WxHか簡略名)数値は必ず偶数で指定する、奇数の場合はエラーが出ます。
  • -f <fmt>    強制的にfmtで指定したフォーマットを適用する(画像として出力)
  • -vframes <number> 変換するビデオフレーム数
  • -y    同名ファイルがあった場合アウトプットファイルを上書きする
  • output_file    出力ファイル(拡張子で出力形式を判断しています) 
注意点
オプション [-ss]の位置は[-i]の前においた方が良いようだ。

2010年7月5日月曜日

TeamViewer5でPort80を閉じる

PCのリモートソフトとして、TeamViewer5 をつかい、2ヵ所のPCを管理している。
このソフトは、Web Serverでよく使われる Port80 をサービスとして起動しているため、ローカルでApache、AN_HTTPD 等起動できない。

早速、Googleで調べてみると・・・ありました。

TeamViewer5 で Port 80 を起動しない方法

レジストリエディタ regedit で

HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer\Version5
GatewayAllowed
 と ListenHttp
DWORD値 1 → 0
2つの項目のDWORD値を 1 から 0 に変更すればよい。

TeamViewer5の起動後、AN_HTTPDを起動してみるとOK、勿論WAMP環境でもOKでした。

phpMyAdminをインストール時「PHP 5.2+ is required」エラー

phpMyAdminをインストールしたところ

PHP 5.2+ is required
というエラーが出たので対策方法を書いておきます。
2010.7.5現在phpのバージョンが5.1.*のようで最新のphpMyAdminに対応していなかったみたいです。

5.1に対応したバージョンを落としてインストールします。

ダウンロード先

ここからphpMyAdmin-2.11.10-all-languages.tar.gzをダウンロードしてきます。
#tar xzvf phpMyAdmin-2.11.10-all-languages.tar.gz
#mv phpMyAdmin-2.11.10-all-languages /var/www/phpmyadmin
以降はCentOSで自宅サーバーのとおりインストールします。
さあ、OKかと思ったところ下記のエラーが見える
mcrypt 拡張をロードできません。PHP の設定を確認してください。
こんな時は
#yum install php-mcrypt
でインストールします。

2010年7月3日土曜日

ffmpeg エラー ”lame: output buffer too small”

現象
ffmpegでビデオファイルを変換中に下記のようなエラーが出て、変換が途中で止まってしまう。

lame: output buffer too small
CentOS 5 の lame 3.98-2 にはバグがあるらしい。

対策
lame最新版のソースから rpm を作る。

ソースパッケージのダウンロード

# cd /usr/src/redhat/SRPMS
# wget http://apt.sw.be/redhat/el5/en/SRPMS.rpmforge/lame-3.98.2-1.rf.src.rpm
ソースパッケージの展開
# rpm -ivh lame-3.98.2-1.rf.src.rpm
最新のソースtar ballをダウンロード
# cd ../SOURCES
# wget http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz?use_mirror=jaist
SPECファイルの変更
# cd ../SPECS
# mv lame.spec lame.spec.org
# wget http://wiki.open-art.jp/files/lame.spec
リビルドでの依存パッケージのインストール
# yum install nasm ncurses-devel
Installed:
nasm.i386 0:0.98.39-3.2.2
ncurses-devel.i386 0:5.5-24.20060715
SPECファイルを元にリビルド
# rpmbuild -bb lame.spec
------------------------------------------------------
+ cd /usr/src/redhat/BUILD
+ cd lame-3.98.4
+ /bin/rm -rf /var/tmp/lame-3.98.4-1.rf-root
+ exit 0
バイナリパッケージのインストール
# cd ../RPMS/i386
# yum localinstall --nogpgcheck lame-3.98.4-1.rf.i386.rpm lame-devel-3.98.4-1.rf.i386.rpm
Running Transaction
Updating : lame 1/4
Updating : lame-devel 2/4
Cleanup : lame-devel 3/4
Cleanup : lame 4/4
Updated:
lame.i386 0:3.98.4-1.rf lame-devel.i386 0:3.98.4-1.rf
検証
途中でエラーが出たaviファイルを変換したところ無事にエンコ出来た。

ffmpeg-phpのインストール

動画データの管理をしやすくするために ffmpeg-php の導入を試みた。

ffmpeg-phpのインストール

$ wget http://downloads.sourceforge.net/ffmpeg-php/ffmpeg-php-0.6.0.tbz2

$ tar jxvf ffmpeg-php-0.6.0.tbz2
$ cd ffmpeg-php-0.6.0
$ phpize
$ ./configure && make && make install
$ vi /etc/php.d/ffmpeg.ini
extension=ffmpeg.so #追加
$ /etc/init.d/httpd reload

$ cd
$ rm -rf ffmpeg-php-0.6.0.tbz2.2 ffmpeg-php-0.6.0
動作確認
解凍したディレクトリにtest_ffmpeg.phpというファイルとtestsというディレクトリがあるので、これを公開しているディレクトリにコピーしてtest_ffmpeg.phpを実行する
tests/mediaにある動画と音声ファイルの情報を出力します。
インストールされているバージョンを確認する場合もこのファイルを参考に出来ます。

Errors対策
・makeで”ffmpeg headers not found”エラーが出現
configure: error: ffmpeg headers not found. Make sure ffmpeg is compiled as shared libraries using the --enable-shared option
 ffmpeg-develがインストールされていないためライブラリーが読み込まれていないみたい。
$ yum --enablerepo=rpmforge install ffmpeg-devel