web-dev-qa-db-ja.com

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

古い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ビデオの品質が影響を受けるかどうかはわかりません

そう、

  • 出力h.264ビデオの品質(およびサイズ、モバイルデバイスのサイズを最小限に抑える必要があるため、veryslowプリセットも使用している理由)だけを考えると、- パックされたBフレームを気にする必要がありますか?

  • 必要に応じて、avidemuxで修正するにはどうすればよいですか?(すでにマニュアルをざっと読んでみました。)

12
4ae1e1

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

古いDivXでエンコードされたビデオは、通常、 パックされたビットストリーム と呼ばれる醜い方法を使用します。これは、複数のビデオフレームを単一の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
15
xiii1408