gpt4 book ai didi

java - MP4Parser 改变视频方向

转载 作者:行者123 更新时间:2023-11-28 21:41:48 31 4
gpt4 key购买 nike

我正在尝试使用 MP4Parser(或您知道的任何其他方法)将横向视频旋转为纵向视频,目前正在使用 TrackHeaderBox 播放但根本无法改变方向,之前有人用过这个吗可以发现我可能犯的错误吗?任何帮助都会有很长的路要走谢谢

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);

最佳答案

在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 现在已旋转 180 度,您可以通过在桌面播放器(如 QuickTime 或 VLC)中播放文件来验证这一点。

Android 上的典型问题

当您借助 VideoView 在 Android 上播放视频时,您可能会注意到没有考虑矩阵。我不完全确定这是不是故意的,但解决方法是使用应用转换的 TextureView

为了做到这一点,你必须

  • 从位于/moov/mvhd 的 MovieHeaderBox 和位于/moov/trak[0, 1, 2, 3]/tkhd 的 MediaHeaderBox 中提取矩阵(取决于包含视频的 trak)。
  • 通过 matrix multiplication 合并两个矩阵.
  • 使用值调用setScaleXsetScaleYsetPivotXsetPivotYsetRotation根据之前步骤的结果矩阵。

关于java - MP4Parser 改变视频方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17177912/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com