FFmpeg / avidemux:パックされたBフレームを修正


12

私は古いmpeg4ビデオ(aviコンテナー内)の一部をFFmpegでh.264にトランスコードしています。基本的に

ffmpeg -i input.avi -c:v libx264 [x264 settings] -c:a libfdk_aac [aac settings] output.mp4

その際mpeg4、次の警告を出します

ビデオは、非標準で無駄な方法を使用してBフレーム(「パックされたBフレーム」)を格納します。VirtualDubやavidemuxなどのツールを使用して修正することを検討してください。

トランスコードは引き続き正常に実行できることはわかっていますが、警告から、生成されるh.264ビデオの品質に影響するかどうかはわかりません

そう、

  • veryslow出力h.264ビデオの品質(およびサイズ、およびモバイルデバイスのサイズを最小化したいので、プリセットも使用している)だけに関心があるので、パックされたB-フレーム?

  • 必要な場合は、avidemuxでどうすれば修正できますか?(私はすでにマニュアルでスキミングを試みました。)

回答:


15

B フレームは、ビデオのフレームを表すためにビデオ圧縮で使用されるフレームタイプです。Bフレームは、以前のフレームと将来のフレームの両方からの情報を使用して、各ビデオフレームを表すことができます。

古いDivXでエンコードされたビデオは、通常、複数のビデオフレームを1つのAVIチャンクに入れるパックドビットストリームと呼ばれる醜い方法を使用しています。パックドビットストリームは標準のMPEG-4ではなく、より多くのスペースを使用し、エンコード/デコードにより多くのCPUパワーを必要とし、(最も重要なことに)別のコンテナータイプにコピーすると問題が発生する可能性があります。これが警告の主な理由です。

単にコピーするのではなく、ビデオを再エンコードしているので、問題ないはずです。元のビデオを保持したいが、別のタイプのコンテナー(MP4またはMKVなど)にコピーする場合は、FFmpegフィルターを使用して、最初にBフレームをアンパックするのが最善mpeg4_unpack_bframesです。

次のような簡単な方法でBフレームを開梱できます

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.