gpt4 book ai didi

ios - 使用 AVAssetExportSession 连接后 m4a 音频比特率增加

转载 作者:行者123 更新时间:2023-11-29 03:06:05 51 4
gpt4 key购买 nike

我正在尝试连接来自 ios 设备库的两个 m4a 音频文件,我在这方面取得了成功,这是我正在使用的代码 -

 AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
AVAssetExportSession *exporter = [[AVAssetExportSession alloc]
initWithAsset: songAsset
presetName: AVAssetExportPresetAppleM4A];
NSLog (@"created exporter. supportedFileTypes: %@", exporter.supportedFileTypes);
exporter.outputFileType = @"com.apple.m4a-audio";
[exporter exportAsynchronouslyWithCompletionHandler:^{}.....

当我检查这些文件时,原始文件的比特率仅为 16 kbps,但在 AVAssetExportSession 文件为 192 kbps 之后......所以 AVAssetExportSession 似乎增加了结果文件的比特率。有没有人有解决此类问题的方法,或者有什么方法可以为生成的文件指定比特率???

最佳答案

更新

如果您确定 AAC/m4a 文件的格式相同,您可以通过从文件中提取原始 AAC(又名 adts)流、连接原始数据包来执行您想要的操作,然后将结果包装回 m4a 容器中。这应该可以消除您所看到的比特率井喷问题,并且仍然可以播放。

以下文件对我来说播放得很好。

cat file1.aac file2.aac > catted.aac

自己试试:

afconvert -d aac file1.m4a file1.aac
afconvert -d aac file2.m4a file2.aac
cat file1.aac file2.aac > concatenated.aac
afconvert -f m4af concatenated.aac concatenated.m4a

要将此 shell 脚本转换为 AudioToolbox 代码,您需要执行以下操作

AudioFileReadPackets(/*from file1.m4a*/);  // all of the packets
AudioFileWritePackets( /* to concatenated.m4a */);
AudioFileReadPackets(/*from file2.m4a*/); // all of the packets
AudioFileWritePackets( /* to concatenated.m4a */);

这应该很快,因为没有解码/编码(只有数据包解析),并且生成的文件的比特率不会发生显着变化。

较旧

我认为 AVAssetExportPresetAppleM4A 正在改变您的比特率很奇怪 - 我的实验保持比特率不变。但是我使用的是单个 AAC/m4a 文件。

如果您使用 AVAssetExportSession 连接多个文件并将它们导出为 AAC/m4a,我认为您无法避免比特率更改(当多个文件中的比特率相同时会发生什么情况)不同?),但是选择最终的比特率是另一回事。

正如您所注意到的,AVAssetExportSession 对导出参数的控制仅限于少数预设。为了获得更多控制,我会使用 AVAssetWriter。当你创建你的 AVAssetWriterInput 你有一个 dizzying array of options ,包括 AVEncoderBitRateKey

如果您想继续使用 AVAssetExportSession 并且只想要较低比特率版本的音频,您可以使用以下任一方式导出为 AVFileTypeQuickTimeMovie AVAssetExportPresetLowQualityAVAssetExportPresetMediumQuality。当然,您将拥有一个 .mov 文件而不是 m4a,但通过 AVAssetExportSession 作为 AVFileTypeAppleM4A/AVAssetExportPresetAppleM4A 再次运行将解决此问题。这两个预设分别通过转换为单声道 22 和 44.1 kHz 音频来降低比特率。听起来不太好。

关于ios - 使用 AVAssetExportSession 连接后 m4a 音频比特率增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754769/

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