4

現在TrackHeaderBoxで再生しているMP4Parser(または、知っている場合は他の方法)を使用して、横向きのビデオを縦向きに回転させようとしていますが、向きをまったく変更できません。私が犯したかもしれない間違い?どんな助けでも大いに役立ちます ありがとう

IsoFile out = new DefaultMp4Builder().build(result);

        // test

        double[] m = null;
        m = new double[] { 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0 };

        TrackBox tb = out.getMovieBox().getBoxes(TrackBox.class).get(0);
        TrackHeaderBox box = tb.getTrackHeaderBox();
        box.setMatrix(m);
4

2 に答える 2

0

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.mp4QuickTime や VLC などのデスクトップ プレーヤーでファイルを再生して確認できるように、ファイルは 180 度回転しています。

Android の典型的な問題

VideoView を使用して Android でビデオを再生すると、マトリックスが考慮されていないことに気付くかもしれません。これが意図的に行われたかどうかは完全にはわかりませんが、回避策はTextureView、変換を適用する a を使用することです。

そうするためには、あなたがしなければならない

  • /moov/mvhd にある MovieHeaderBox と /moov/trak[0, 1, 2, 3]/tkhd にある MediaHeaderBox からマトリックスを抽出します (どのトラックにビデオが含まれているかによって異なります)。
  • 行列の乗算によって両方の行列を結合します。
  • 前のステップの結果の行列に従ってsetScaleX、 、setScaleYsetPivotXsetPivotYおよびを呼び出します。setRotation
于 2013-06-30T21:42:11.570 に答える