Search code examples
phpsshffmpegbackticks

ffmpeg: using the returned data in php


I have started using ffmpeg and I am very new to it, so please bear with me.

I have installed ffmpeg on my server and it works great; I can run certain commands and get output data when logged in via ssh

For example I can run

ffmpeg -i Sleep\ Away.mp3 

Which returns the following:

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

The question I am asking is, how can I use the output data above? I am developiong a music website; say I want to loop through all the MP3 files and save the info about them into a database, so that the above would result in:

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

obviously in a table

I have tried to use the php backtick operator with no success so far. I just thought I would put a question up here to get some advice from people that have done something similar.

Thanks

Update: I have tried the following

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

both don't appear to return anything.


Solution

  • ffmpeg sends that information on standard error, and not to standard output which is what shell_exec() captures.

    You need to add: 2>&1 at the end of your command:

    $out = shell_exec('/path/to/ffmpeg -i Sleep\ Away.mp3 2>&1');