libx264 コーデックを使用して、FFMPEG でフレームのセットから .mp4 ビデオをエンコードしようとしています。
私が実行しているコマンドは次のとおりです:
/usr/local/bin/ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4
時々、次のエラーが発生します。
[libx264 @ 0xa3b85a0] height not divisible by 2 (520x369)
少し調べてみたところ、この問題はスケーリング アルゴリズムに関係しているようで、-vf 引数を追加することで修正できるようです。
しかし、私の場合はスケーリングはしたくありません。理想的には、フレームとまったく同じ寸法を維持したいです。何かアドバイスはありますか? h264 が強制するアスペクト比のようなものはありますか?
ベストアンサー1
元の質問に対する答えは、ビデオを拡大縮小するのではなく、エラーを修正することですheight not divisible by 2
。これは、次のフィルターを使用して実現できます。
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"
フルコマンド:
ffmpeg -i frame_%05d.jpg -vcodec libx264 \
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -r 24 \
-y -an video.mp4
基本的に、.h264 には偶数次元が必要なので、このフィルターは次のようになります。
- 元の高さと幅を2で割る
- 最も近いピクセルに切り上げます
- それをもう一度2倍にして偶数にします
- この数まで黒のパディングピクセルを追加します
フィルターパラメータを追加することでパディングの色を変更できます:color=white
。パッドのドキュメント。