Problem is, I am trying to convert (through php), a .3gp (or any video format) file to ogg.
When I do not specify -vcodec and -acodec, the video is converted, but does not have any audio.
I had read here and other places that I need to specify -acodec libvorbis, however, when I specify the codec as libvorbis, the conversion fails: video converts to 0byte file.
Basically, I am trying to determine if the codec specified is actually part of the ffmpeg build I am using as a process of narrowing down my issue.
Code that produces full length video without sound:
$srcFile = 'anyvideo.3gp';
$destFile = 'anyvideo.ogg';
$ffmpegPath = 'path/to/ffmpeg.exe';
$ffmpegObj = new ffmpeg_movie($srcFile);
$srcWidth = makeMultipleTwo($ffmpegObj->getFrameWidth());
$srcHeight = makeMultipleTwo($ffmpegObj->getFrameHeight());
$srcFPS = $ffmpegObj->getFrameRate();
$srcAB = intval($ffmpegObj->getAudioBitRate()/1000);
$srcAR = $ffmpegObj->getAudioSampleRate();
$srcLen = $ffmpegObj->getDuration();
exec($ffmpegPath." -i ".$srcFile." -ar ".$srcAR." -s ".$srcWidth."x".$srcHeight." ". $destFile);
And the code that produces 0byte file:
exec($ffmpegPath." -i ".$srcFile." -acodec libvorbis -ar ".$srcAR." -s ".$srcWidth."x".$srcHeight." ".$destFile);
So, my question is, how do I determine the codec's available to ffmpeg using PHP? Can it even be done?
UPDATED - ANSWER BELOW
ANSWER:
exec($ffmpegPath." -codecs", $codecArr);
for($ii=0,$ii<count($codecArr);$ii++){
echo $codecArr[$ii];
}
You should be able to see what formats are installed by using the -formats flag on the commandline
ffmpeg -formats
This will output a long list of codecs available to you.
Since ffmpeg version 0.8 it is
$ ffmpeg -codecs
If you have an older version use
$ ffmpeg -formats
There are other ffmpeg option syntax changes, too. E.g. -vcodes is -c:v since ffmpeg 0.9.
You might have have also a look to the php library html5-video-php to convert your videos to MP4, WEBM, or OGG formats. The library wraps ffmpeg and considers the different ffmpeg versions. To list all available codecs and retrive basic video infos use:
$html5video = new Html5Video\Html5Vide();
$codecsList = $html5video->getEncoders();
$videoInfo = $html5video->getInfo($src);