3

これが再投稿/同様の投稿である場合は、こことGoogleで既に作成された投稿内で問題の特定の解決策を検索するために最善を尽くしましたが、できなかった場合はまずお詫び申し上げます.

サーバーにアップロードする前に、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 ビルドを数回変更しましたが、同じ問題が発生します。

前もって感謝します。

編集:可能な回避策として、ビデオ/オーディオを別々にエンコードしてから、それらを元に戻す方法はありますか? これにより、オーディオ/ビデオの同期の問題が発生する可能性はありますか?

4

1 に答える 1

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 ビデオを PC のローカルで最初に表示すると、最初に再生を開始したときにビデオがフリーズし、数秒後に (オーディオに対して) 正しい位置にジャンプしますが、最初から再生すると問題なくプレイ。私のビデオカードは標準に達していないと思います。これは、変換後にファイルを最初に表示したときに問題を説明します。

いずれにせよ、上記のコードは、ffmpeg と php を使用して .ogg 形式に適切に変換する際に問題が発生した他のユーザーに対しても機能するはずです。

于 2013-04-28T23:46:49.857 に答える