如何从视频文件中提取音频而不使用FFmpeg ?
我想使用AVMutableComposition
和AVURLAsset
来解决它。从.mov转换为.m4a文件。
答案 0 :(得分:2)
在所有多媒体格式中,音频与视频分开编码,其帧在文件中交错。因此,从多媒体文件中删除视频不需要对编码器和解码器进行任何操作:您可以编写一个文件格式解析器来删除视频轨道,而无需使用手机上的多媒体API。
要在不使用第三方库的情况下执行此操作,您需要从头开始编写解析器,这可能很简单,也可能很难,具体取决于您希望使用的文件格式。例如,FLV非常简单,因此从其中删除轨道非常容易(只需越过流,检测帧开始并丢弃'0x09'=视频帧)。 MP4有点复杂,它的标题(MOOV)有一个分层结构,其中你有每个轨道(TRAK原子)的标题。您需要删除视频TRAK,然后在复制时复制交错的比特流原子(MDAT)跳过所有视频数据簇。
除了ffmpeg之外,您还可以使用第三方库。需要记住的是GPAC MP4BOX(LGPL许可证)。如果LGPL存在问题,可以使用大量商业SDK。
答案 1 :(得分:2)
以下Swift 3代码显示了如何从电影文件( .mov )中提取音频并使用{{将其转换为音频文件( .m4a ) 1}},AVURLAsset
和AVMutableComposition
:
AVAssetExportSession