2

问题是,我正在尝试(通过 php)将 .3gp(或任何视频格式)文件转换为 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 可用的编解码器?甚至可以做到吗?

更新 - 答案如下

4

3 回答 3

3

您应该能够通过在命令行上使用 -formats 标志来查看安装了哪些格式

ffmpeg -formats

这将输出一长串可用的编解码器。

于 2012-11-10T03:04:35.307 回答
1

回答:

exec($ffmpegPath." -codecs", $codecArr);
for($ii=0,$ii<count($codecArr);$ii++){
    echo $codecArr[$ii];
}
于 2012-11-19T01:02:37.973 回答
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);
于 2013-08-09T04:20:41.360 回答