当前位置: 首页 > 知识库问答 >
问题:

在android中修剪aac-mp4音频(mediaCodec/extractor)

凌炜
2023-03-14

我想修剪现有的aac-mp4音频文件。我第一次想“修剪”0个字节,基本上就是使用MediaCodec/MediaExtractor复制文件。

问题:

  1. 标题是固定大小的,我可以从旧文件中复制它?或者它有一些关于音轨持续时间的信息,我需要更新它?如果它有固定大小,那是什么(为了知道我应该从旧文件中复制多少字节)?
  2. 我应该只使用提取器的getSampleData(ByteBuffer,偏移量)和进步()还是我也应该使用MediaCodec并提取样本(解码),然后用编码器再次对它们进行编码-并写入编码值?

共有1个答案

葛泳
2023-03-14

>

  • 如果使用MediaExtractor,您可能不会自己读取原始文件,因此我看不出您打算复制哪个头文件。这可能是使用MediaExtractor MediaMuxer最容易做到的;只需将MediaFormat和从MediaExtractor获得的数据包复制到MediaMuxer即可。

    这取决于你想怎么修剪。完全不涉及MediaCodec是最简单的,只需将数据包从MediaExtractor复制到MediaMuxer,并在开始时跳过要忽略的数据包(或使用seekTo()查找正确的开始位置)。

    但是请记住,音频帧有一定的长度;对于AAC-LC,通常是1024个样本,对于48 kHz的音频是21毫秒。因此,如果您只复制单个数据包,对于48 kHz,您无法获得比21毫秒更接近的修剪颗粒度。这对于大多数情况下可能是好的,但是如果音频的采样率较低,例如8 kHZ,颗粒度最终高达128毫秒。

    如果您想要修剪到比单个数据包允许的位置更精确的位置,则需要使用MediaCodec进行解码,跳过适当数量的样本,将解码器的输出帧重新打包为编码器的新完整帧,并对其进行编码。

  •  类似资料:
    • 我正在尝试使用android AudioRecord和MediaCodec对aac音频进行编码。我创建了一个非常类似于(使用Android MediaCodec从相机编码H.264)的编码器类。使用此类,我创建了一个AudioRecord实例,并告诉它将其byte[]数据读出到AudioEncoder(audioEncoder.offerEncoder(Data))。 这是我的音频记录设置 我成功

    • 我正在尝试使用使用编解码器对一些音频流进行编码。为此,我使用了google cts ExtractEncodeMust的这个实现。 对于某些aac文件,它会在编码某些帧后抛出。更准确地说,它会在第1030行抛出异常,。 我正在配置如下: 我完全不知道如何解决这个问题。任何形式的帮助都将不胜感激。 带有一些日志的堆栈跟踪: 设备:小米POCO x3 操作系统:Android10 导致溢出的示例文件信

    • 我正在修改一个Android框架示例,将MediaCodec生成的基本AAC流打包成一个独立的。mp4文件。我使用的是一个实例,其中包含一个由实例生成的AAC曲目。 然而,我总是最终得到一个错误消息调用:

    • 我有一个长音频部分和一个短视频部分,我想在一起mux。 我正在尝试使用以下命令进行MUX: video_0-0002.h264-整个文件(2秒长) Audio.wav-从4秒到6秒 但音频被搞砸了...我怎样才能正确地做呢? 也试过了,听起来好像最后还是有寂静。

    • 在我的Android应用程序中,我想通过改变mp4视频的分辨率、比特率来压缩mp4视频。我不想使用FFmpeg(因为我不想使用NDK),所以我决定使用MediaCodec API。 以下是我的逻辑步骤: null 我的问题是:我不知道如何设置解码器的输出和编码器的输入之间的连接。我可以将视频解码到一个表面,或者从一个表面编码一个新的视频。但我不明白怎么把它们联系起来。 我阅读了以下链接:Andro

    • 我正在尝试将MP3音频文件混合到MP4视频中。经过数小时的搜索,我得出结论,我需要将MP3文件转换为AAC格式,该格式适合MP4容器。 在android中为视频添加音频 但是我找不到任何关于如何将MP3文件转换为AAC格式的留档。那么你对如何将MP3音频转换为AAC音频有什么建议吗? 此外,我还需要在最终视频中的特定时间插入几段音频。