0

使い始めてffmpegとても新しいので、ご容赦ください。

ffmpegサーバーにインストールしましたが、うまく機能しています。ssh経由でログインすると、特定のコマンドを実行して出力データを取得できます

たとえば、私は実行できます

ffmpeg -i Sleep\ Away.mp3 

これは次を返します:

ffmpeg version 0.8.5, Copyright (c) 2000-2011 the FFmpeg developers
  built on Aug 20 2012 09:28:43 with clang 3.1 (tags/Apple/clang-318.0.61)
  configuration: --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libfaac --enable-libxvid --enable-libx264 --enable-libvpx --enable-hardcoded-tables --enable-shared --enable-pthreads --disable-indevs --cc=clang
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  7. 0 / 53.  7. 0
  libavformat  53.  4. 0 / 53.  4. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mp3 @ 0x7f9694011a00] Header missing
    Last message repeated 13 times
[mp3 @ 0x7f9694007c00] max_analyze_duration 5000000 reached at 5007020
[mp3 @ 0x7f9694007c00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'Sleep Away.mp3':
  Metadata:
    track           : 3
    album           : Bob Acri
    artist          : Bob Acri
    title           : Sleep Away
    genre           : Jazz
    album_artist    : Bob Acri
    composer        : Robert R. Acri
    date            : 2004
  Duration: 00:03:21.77, start: 0.000000, bitrate: 192 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 192 kb/s
At least one output file must be specified

私が尋ねている質問は、上記の出力データをどのように使用できるかということです。私は音楽のウェブサイトを開発しています。すべてのMP3ファイルをループして、それらに関する情報をデータベースに保存したいとします。これにより、上記の結果は次のようになります。

Sleep Away.mp3    mp3    3:21    Jazz    2004     Bob Acri ...

明らかにテーブルの中で

phpバッククォート演算子を使用しようとしましたが、これまでのところ成功していません。似たようなことをした人からアドバイスをもらうために、ここに質問をするつもりでした。

ありがとう

更新:私は以下を試しました

<?php $output = `ffmpeg -i Sleep\ Away.mp3`; echo "<pre>$output</pre>"; ?>
<?php $output = shell_exec('ffmpeg -i Sleep\ Away.mp3'); echo "<pre>$output</pre>"; ?>

どちらも何も返さないようです。

4

3 に答える 3

4

ffmpegその情報を標準エラーで送信しますが、キャプチャする標準出力には送信しません。shell_exec()

次を追加する必要があり2>&1ます:コマンドの最後に:

$out = shell_exec('/path/to/ffmpeg -i Sleep\ Away.mp3 2>&1');
于 2012-08-22T13:51:02.383 に答える
1

それで、phpからシェルコマンド(あなたの場合はffmpeg)を実行し、その出力をキャプチャしたいですよね?

BacktickOperatorまたはshell_exec関数はそのための良いスタートです。

これらは、セーフモードが無効になっている場合、およびshell_exec関数が無効になっていない場合(disable_functions設定を介して)にのみ機能することに注意してください。スクリプトが共有ホスティング事業者で実行されている場合、これらの構成にアクセスできない可能性がありますが、少なくともphpinfo()を介してスクリプトを確認できるはずです。

コマンドで参照しているファイルへのパスをどのように指定するかも重要です。phpスクリプトは、実行する予定の作業フォルダーでは実行されない可能性があります。したがって、絶対パスを介してすべてのファイルを参照するのが最適な場合があります。

于 2012-08-22T13:32:50.307 に答える
1

代わりにFFprobeを使用してください。

ffprobe -loglevel error -show_format -show_streams input.mp3

FFmpegはビデオを操作するためのものであり、FFprobeはビデオ情報を取得するための付属ツールです。ビデオのインポート時にFFmpegが偶然に吐き出す診断メッセージを解析する必要がなく、さまざまな簡単に解析できる形式でデータを出力します。

于 2012-08-22T22:18:35.860 に答える