2013-04-28 52 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格式的問題。