MP4 にローテーションに関する情報を埋め込む
ビデオ トラックの方向を本当に変更していますか? オーディオ トラックの方向を変更しても、変化は見られません。
私の経験から、ファイル全体の向きを変更する方が簡単です (1.0.4.2 API バージョン):
Movie result = MovieCreator.build("input.mp4");
// do something with the file
Container out = new DefaultMp4Builder().build(result);
MovieHeaderBox mvhd = Path.getPath(out, "moov/mvhd");
mvhd.setMatrix(Matrix.ROTATE_180);
out.writeContainer(new FileOutputStream("result.mp4").getChannel());
または、オブジェクトを経由せずに方向を直接変更したい場合Movie
:
IsoFile isoFile = new IsoFile("video.mp4");
MovieHeaderBox mvhd = Path.getPath(isoFile, "/moov/mvhd");
mvhd.setMatrix(Matrix.ROTATE_180);
isoFile.writeContainer(new FileOutputStream("result.mp4").getChannel());
result.mp4
QuickTime や VLC などのデスクトップ プレーヤーでファイルを再生して確認できるように、ファイルは 180 度回転しています。
Android の典型的な問題
VideoView を使用して Android でビデオを再生すると、マトリックスが考慮されていないことに気付くかもしれません。これが意図的に行われたかどうかは完全にはわかりませんが、回避策はTextureView
、変換を適用する a を使用することです。
そうするためには、あなたがしなければならない
- /moov/mvhd にある MovieHeaderBox と /moov/trak[0, 1, 2, 3]/tkhd にある MediaHeaderBox からマトリックスを抽出します (どのトラックにビデオが含まれているかによって異なります)。
- 行列の乗算によって両方の行列を結合します。
- 前のステップの結果の行列に従って
setScaleX
、 、setScaleY
、setPivotX
、setPivotY
およびを呼び出します。setRotation