问题是,我正在尝试将.3gp(或任何视频格式)文件转换(通过php)到ogg。
当我没有指定-vcodec和-acodec时,视频会被转换,但没有任何音频。
我在这里和其他地方需要指定-acodec libvorbis,但是,当我将编解码器指定为libvorbis时,转换失败:视频转换为0byte文件。
基本上,我试图确定指定的编解码器是否实际上是我正在使用的ffmpeg构建的一部分,作为缩小我的问题的过程。
生成没有声音的全长视频的代码:
$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);
生成0byte文件的代码:
exec($ffmpegPath." -i ".$srcFile." -acodec libvorbis -ar ".$srcAR." -s ".$srcWidth."x".$srcHeight." ".$destFile);
所以,我的问题是,如何使用PHP确定ffmpeg可用的编解码器?它甚至可以完成吗?
更新 - 以下答案
答案 0 :(得分:3)
您应该能够通过在命令行上使用-formats标志来查看安装的格式
ffmpeg -formats
这将输出一长串可供您使用的编解码器。
答案 1 :(得分:1)
解答:
exec($ffmpegPath." -codecs", $codecArr);
for($ii=0,$ii<count($codecArr);$ii++){
echo $codecArr[$ii];
}
答案 2 :(得分:0)
由于ffmpeg版本0.8,它是
$ ffmpeg -codecs
如果你有旧版本,请使用
$ ffmpeg -formats
还有其他ffmpeg选项语法更改。例如。 -vcodes是-c:v,因为ffmpeg是0.9。
您可能还需要查看php库html5-video-php,将视频转换为MP4,WEBM或OGG格式。该库包装ffmpeg并考虑不同的ffmpeg版本。要列出所有可用的编解码器并检索基本视频信息,请使用:
$html5video = new Html5Video\Html5Vide();
$codecsList = $html5video->getEncoders();
$videoInfo = $html5video->getInfo($src);