Question

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.

Était-ce utile?

La 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');

Autres conseils

So you want to execute a shell command (ffmpeg in your case) from php, and capture its output, right?

Backtick Operator or the shell_exec function are a good start for that.

Note that these only work when safe mode is disabled and when shell_exec function is not disabled (via disable_functions setting). If your scripts are running on a shared hoster, you might not have access to these configurations, but you should at least be able to check them via phpinfo().

How you specify the path to any file you are referencing in the command is also crucial - your php script might not run with the working folder you expect it to run; so it might be best to reference to all files via absolute path.

Use FFprobe instead:

ffprobe -loglevel error -show_format -show_streams input.mp3

FFmpeg is for manipulating video, FFprobe is the accompanying tool for getting video information. It outputs data in a variety of easily parsed formats instead of requiring parsing the diagnostic messages that FFmpeg incidentally spits out when importing a video.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top