2013-04-28 102 views
3

让我先认识一下,如果这是重新发布/类似帖子,我尽我所能搜索特定的解决方案给我在这里已经创建的帖子内,在谷歌上,但不能。ffmpeg/PHP - 将任何视频格式转换为ogg的问题 - 歪歪视频/无音频 - win64

我在win64系统上的本地主机上使用ffmpeg来创建/测试视频转换脚本,然后将它们上传到服务器。

但是,无论何时我尝试从任何其他格式转换为.ogg,我都能够成功转换为/从mp4/flv/wmv/mov发出问题。

首先我尝试这样做:

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的构建几次,仍然收到相同的问题。

在此先感谢。

编辑:作为一种可能的解决方法,是否有一种方法,我可以简单地编码视频/音频分开,然后一拍即合?这是否会导致音频/视频同步问题?

回答

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格式的问题。