首先让我道歉,如果这是重新发布/类似帖子,我会尽力在此处已经创建的帖子中搜索我的问题的特定解决方案,并在谷歌上,但不能。
我在win64系统上的localhost上使用ffmpeg来创建/测试视频转换脚本,然后再将它们上传到服务器。
我能够毫无问题地成功转换为mp4 / flv / wmv / mov,但是,每当我尝试从任何其他格式转换为.ogg时,我都会遇到问题。
首先我尝试了这个:
exec($ffmpegPath." -i ".$srcFile." ".$destFile);
但最终出现了没有视频/声音的损坏文件。然后我做了一些阅读,并发现一些帖子说你必须在转换为.ogg时明确启用libvorbis / libtheora,所以我尝试了这个:
$aCodec = ' -acodec libvorbis';
$vCodec = ' -vcodec libtheora';
exec($ffmpegPath." -i ".$srcFile.$aCodec.$vCodec." ".$destFile);
这次我得到了一个有效的.ogg文件,声音,然而,视频输出非常不稳定。为了试图找到问题,我开始对exec系列进行编辑,最后得到了这个:
$ffmpegObj = new ffmpeg_movie($srcFile);
$srcVB = intval($ffmpegObj->getVideoBitRate());
$vCodec = ' -vcodec libtheora';
exec($ffmpegPath." -i ".$srcFile.$vCodec." -vb ".$srcVB." ".$destFile);
以高质量输出.ogg视频,但没有声音。
在需要安装更多软件(ffmpeg2theora)等之前,有关此问题还有什么想法吗?
另外,如果有帮助,我会回显ffmpeg的输出,并且当使用上面的#2时,会显示许多错误。
100 buffers queued in output stream 0:1, something may be wrong.
[ogg @ 00000000024bf780] st:0 PTS: 6743 DTS: 6743 < 7745 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 6871 DTS: 6871 < 7746 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 6999 DTS: 6999 < 7747 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 7127 DTS: 7127 < 7748 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 7255 DTS: 7255 < 7749 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 7383 DTS: 7383 < 7750 invalid, clipping
似乎libvorbis和libtheora并不是很好玩?
最后,我已经多次更改了ffmpeg.exe构建,但仍然遇到了同样的问题。
提前致谢。
编辑:作为一种可能的解决方法,有没有一种方法可以简单地对视频/音频进行单独编码,然后将它们重新拼凑起来?这会导致音频/视频同步问题吗?
答案 0 :(得分:2)
像往常一样,在这里发布我的问题(经过无数小时的故障排除后),我相信我可能已经纠正了这个问题。我不仅要指定用于转换文件的音频/视频编解码器,还要指定输出的.ogg视频的音频/视频比特率:
//CREATE CLASS INSTANCE
$ffmpegObj = new ffmpeg_movie($srcFile);
//GET AUDIO BITRATE FROM SOURCE FILE
$srcAB = intval($ffmpegObj->getAudioBitRate());
//GET VIDEO BITRATE FROM SOURCE FILE
$srcVB = intval($ffmpegObj->getVideoBitRate());
//SET THE AUDIO CODEC TO LIBVORBIS
$aCodec = ' -acodec libvorbis';
//SET THE VIDEO CODEC TO LIBTHEORA
$vCodec = ' -vcodec libtheora';
exec($ffmpegPath." -i ".$srcFile.$vCodec." -vb ".$srcVB." -ab ".$srcAB." ".$destFile);
这会输出质量非常接近原始视频格式的视频/音频。
显然,任何试图利用上述代码的人都需要添加对$ ffmpegPath / $ srcFile / $ destFile的引用,并将ffmpeg类提供给他们的脚本。
此外,在最初在我的电脑上本地查看firefox中的.ogg视频时,视频会在第一次开始播放时冻结,然后在几秒后跳转到正确的位置(相对于音频),但是,如果重播从一开始就没有问题。我假设我的视频卡不符合标准;这可以解释转换后第一次查看文件时的问题。
在任何情况下,上述代码都适用于使用ffmpeg和php正确转换为.ogg格式的任何其他代码。