【发布时间】:2015-08-11 22:24:58
【问题描述】:
对于使用过jcodec 的任何人,我的理解是该库还不能对音频进行编码(但是它可以对其进行解码)。
但是,jcodec 确实有一个PCMMP4MuxerTrack class,它允许您在编码 MP4 视频时将原始 PCM 数据addSamples(ByteBuffer) 添加到音轨。这会生成一个带声音的 MP4 视频文件。
我已经成功地将一些虚拟 PCM 音频添加到我导出的 MP4 文件中,并且 VLC 可以正常播放它,所以它似乎可以工作......
但如果这可行,为什么我总是看到人们说 MP4 不支持 PCM 音频 (one source)?
我是不是很幸运 VLC 可以准确地播放我的 MP4 文件和声音?它可能不适用于其他播放器/操作系统吗?
【问题讨论】:
-
why do I keep seeing people say that MP4 doesn't support PCM audio?好吧,因为它没有。 MP4 由 MPEG 组成,仅包含 MPEG 编解码器(h.264/h.265 视频和 AAC/MP3 音频)。在 VLC 中转到 Tools,然后转到 Codec Information。流 0 通常是视频,流 1 是音频。音频说 MP4a 吗? (然后 JCodec 已将 PCM 转换为 AAC 或 MP3)否则这意味着您很幸运 VLC 播放了它。通过将文件拖到浏览器选项卡中进行测试(它可能会工作,因为浏览器同时理解 AAC 和 PCM)。如果浏览器也能玩就够了吗? -
啊,这实际上很有帮助,我不知道 VLC 技巧。确实是 PCM,很高兴知道,因为我想知道 jcodec 是否在幕后转换为 AAC/MP3 - 猜不到。
-
不幸的是,Java 不是我的主要语言,但我了解媒体格式。我不明白 JCodec 如何在同一个地方写入 PCM 而不是 AAC/MP3 字节?如果您 look here 那么我认为 MP4Muxer.java 或 FramesMP4MuxerTrack.java 将帮助您添加音频帧。 MP3 和 AAC 音频本身被分成帧,所以也许做一个
for loop来获取每个 AAC 帧字节和多路复用器?? -
假设您有一个想要用作音频的 aac 文件...在一些 hex 编辑器中打开它以确认您的内容 read here .无论如何,将帧长度(整数)设置为变量。现在回到帧起始字节位置并跳过 7 个字节,然后根据
frame_length - 7抓取所有内容您有一个准备好复用的 aac 帧.. 从新位置重复以字节为单位,依此类推,直到文件结束。 -
@FTLRalph 我尝试了您的方法,但播放视频时声音很奇怪