マンガでよめる痔のこと・薬のこと

ffmpegをphpから使いたいと思って
サーバーにffmpegとffmpeg-phpをインストールしたのですが、
テストページで以下のようなエラーがでてしまいます。

Warning: dl() [function.dl]: Unable to load dynamic library '/usr/lib/php/modules/ffmpeg.so' - /usr/lib/php/modules/ffmpeg.so: undefined symbol: img_resample in /var/www/html/ffmpeg/test_ffmpeg.php on line 17

/usr/lib/php/modules/ffmpeg.soは有りました。
ffmpegコマンドも最初は動きませんでしたが、いろいろ無いと言われた*.soファイルへのシンボリックリンクを/usr/lib内に作ることで動くにようにはなりました。
他にphp.iniにextension=ffmpeg.soと入れてみたりいろいろいじっていましたがどうにも私の知識では解決できそうにありません。
何卒お知恵をお借りできたらと思い投稿させていただきました。

環境は、
fedora8
php5

ffmpegのインストールは
http://codezine.jp/article/detail/2444?p=1
ffmpeg-phpのインストールは
http://www.phppro.jp/phptips/archives/vol50/2
を参考にさせていただきました。

宜しくお願いしますm(_ _)m

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ffmpeg-phpを使わずに、一度execメソッドでffmpegを実行してみて、


PHPからffmpegが実行できるか試してみてはいかがでしょうか?

exec("ffmpeg -y -i /home/test.avi -f image2 -ss 00:00:10 -vframes 1 /home/test.jpg");
↑のコマンドは/home/test.aviの動画から10秒後(1フレーム)を画像にするものです。。

この回答への補足

早速アドバイスいただきましてありがとうございます。
教えて頂いた内容を実行してみました結果、
何も出力されませんでした。
exec("ffmpeg -y -i /var/www/html/ffmpeg/test.avi -f image2 -ss 00:00:03 -vframes 1 /var/www/html/ffmpeg/test.jpg", $output, $result);
の結果は、
$outputがarray empty
$resultがint(127)
でした。
これらが意味しているところは分かりませんでした。
exec("ffmpeg -y -i /var/www/html/ffmpeg/test.avi -f image2 -ss 00:00:03 -vframes 1 /var/www/html/ffmpeg/test.jpg > log.txt");
としてみましたら、空のlog.txtができていました。
コマンドライン上で
ffmpeg -y -i /var/www/html/ffmpeg/test.avi -f image2 -ss 00:00:03 -vframes 1 /var/www/html/ffmpeg/test.jpg
を直接実行したら、正常に処理され、jpgが出来ました。
そのときの実行結果は以下になります。

Fmpeg version SVN-r14967, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: --enable-shared --enable-swscale --enable-gpl
libavutil 49.10. 0 / 49.10. 0
libavcodec 51.69. 0 / 51.69. 0
libavformat 52.21. 0 / 52.21. 0
libavdevice 52. 1. 0 / 52. 1. 0
built on Aug 26 2008 02:23:37, gcc: 4.1.2 20070925 (Red Hat 4.1.2-33)
[avi @ 0x82f81f0]sample size (16) != block align (4)

Seems stream 0 codec frame rate differs from container frame rate: 29.97 (30000/1001) -> 29.97 (2997/100)
Input #0, avi, from '/var/www/html/ffmpeg/test.avi':
Duration: 00:00:03.00, start: 0.000000, bitrate: 29812 kb/s
Stream #0.0: Video: dvvideo, yuv411p, 720x480, 29.97 tb(r)
Stream #0.1: Audio: pcm_s16le, 32000 Hz, stereo, s16, 1024 kb/s
Output #0, image2, to '/var/www/html/ffmpeg/test.jpg':
Stream #0.0: Video: mjpeg, yuvj420p, 720x480, q=2-31, 200 kb/s, 29.97 tb(c)
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
frame= 1 fps= 0 q=4.1 Lsize= -0kB time=0.03 bitrate= -5.3kbits/s
video:30kB audio:0kB global headers:0kB muxing overhead -100.071248

やはりPHPからの実行ができないようですが、どこを見ればいいでしょうか?大変お手数ですが、また何かヒントをいただけたら幸いです。
よろしくお願いします。

補足日時:2008/08/26 20:28
    • good
    • 0
この回答へのお礼

すいません補足に書かせて頂いた件は
exec("ffmpeg ...

exec("/usr/local/bin/ffmpeg ...
とすることで解決しました。
しかし本題は以前解決してませんが・・
ご報告までです。

お礼日時:2008/08/27 10:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?

Qphpでバッチ組めますか?

phpで画面のないアプリケーションを作成し、シェル起動させる事は可能ですか?

やらない方が良いのかもしれませんが既存の資産を利用できるので楽な事もあり問題ないならそうしたいと思います。

バッチでやる事はMYSQLのデータの加工です。

バッチでMYSQLのデータを加工するなら○○を使った方が良いというアドバイスもあればお願いします。


・linux
・php
・mysql

Aベストアンサー

バッチを作ること自体はよくやることですし、問題ないと思います。
ただし、#1さんも書かれている通り、CLI版PHPは、"最近のPHP"から使えるようになりました。

>できたっぽいですが、先にバージョン情報の出力もやってしまう感じです。
>(ワーニングは気にしないとして)これはどうにかなりませんか?
質問者さんの使われているPHPのバージョンが書かれていませんので推測ですが
メッセージから判断するとCLI版ではなく、CGI版のPHPが動作しているように思えます。
詳しくはマニュアル(参考URL)を参照ください。

参考URL:http://www.php.net/manual/ja/features.commandline.php

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

Q特定ディレクトリのファイルを全部消去する

2日徹夜していろいろやってみましたがどうにもなりません。
どなたか助けてください!

ディレクトリAの中にimageという名前のディレクトリがあります。
imageディレクトリには100前後のjpg画像があります。
ディレクトリAにおいてあるreset.phpで、imageディレクトリ内のフォルダを全部削除するにはどうしたらよいでしょうか。
以下、いろいろ試したソースですが、これだとエラーが出てしまいます。

よろしくおねがいします!

$res_dir = opendir( './image' );
while( $file_name = readdir( $res_dir ) ){
unlink($file_name);
}

Aベストアンサー

readdir()の戻り値 $file_name を全て見てみるとわかると思いますが、カレントディレクトリを表す "." と 親ディレクトリを表す ".."
も返ってきています。unlink() ではディレクトリを削除することはできません。
よって、is_file()関数でファイルかどうか判定して、ファイルならば unlink() すればよいです。

image ディレクトリ内にファイルしか存在しないのであれば、

$path = './image';
$res_dir = opendir( $path );
while( $file_name = readdir( $res_dir ) ){
echo $file_name."\n";
if(is_file($path.'/'.$file_name))
unlink($path.'/'.$file_name);
}

でOKです。

./image ディレクトリ内にさらにサブディレクトリがある場合は、もう少し複雑になります。

以下のサイトに例があります。
http://php.morva.net/manual/ja/function.rmdir.php

readdir()の戻り値 $file_name を全て見てみるとわかると思いますが、カレントディレクトリを表す "." と 親ディレクトリを表す ".."
も返ってきています。unlink() ではディレクトリを削除することはできません。
よって、is_file()関数でファイルかどうか判定して、ファイルならば unlink() すればよいです。

image ディレクトリ内にファイルしか存在しないのであれば、

$path = './image';
$res_dir = opendir( $path );
while( $file_name = readdir( $res_dir ) ){
echo $file_name."\n";
if(i...続きを読む

Qディレクトリの中身(ファイル)をコピーするコマンドは?(fedora)

こんにちは。
fedora core5を使っていてCPコマンドで困りました。
cp -R /home/aaa /home/bbb
と入力して、aaaというディレクトリの中身のファイルを全てbbbというディレクトリへコピーしようとしたのですが、これではaaaというディレクトリごとbbbへコピーされてしまい、/home/bbb/aaa みたいになってしまいます。

指定したディレクトリの中のファイルを全て別ディレクトリへコピーするときはどのように指定すればよいのでしょうか?

Aベストアンサー

カレントディレクトリが/homeとします。
cp ./aaa/* ./bbb/
とすればいいと思います。ドットファイルまでコピーしてくれるかどうかは自信がありません。manを読んで下さい。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む


人気Q&Aランキング