系列文章

无损压缩格式详细介绍

有损压缩格式详细介绍

其他音频格式详细介绍

特殊用途格式详细介绍

前不久在捣鼓自己的音乐网站时突发奇想,十分好奇音频格式都有哪些种以及都有什么特点。正巧遇到了一个音频转换器,上面提供了九种音频格式。秉着探索一下的原则去搜寻,结果发现数量居然超乎想象,很多音频格式都是从来没有见到过的。

于是借此契机,我也打算盘点科普一下音频文件格式的一些相关内容。

免责声明:以下部分内容信息来源于网络与chatgpt询问结果,如有纰漏敬请指正~

盘点音频格式

根据目前查找到的所有结果,大致将音频格式分以下几类

无损压缩格式

  1. WAV (Waveform Audio File Format) - 常见的未压缩音频格式,由Microsoft和IBM开发。
  2. AIFF (Audio Interchange File Format) - 苹果公司开发的未压缩音频格式。
  3. FLAC (Free Lossless Audio Codec) - 常见的无损压缩音频格式,广泛使用。
  4. ALAC (Apple Lossless Audio Codec) - 苹果公司的无损压缩音频格式。
  5. APE (Monkey’s Audio) - 另一种无损压缩音频格式。

有损压缩格式

  1. MP3 (MPEG-1 Audio Layer 3) - 最常见的有损压缩音频格式,广泛应用于各种音频设备。
  2. AAC (Advanced Audio Coding) - 比MP3更高效的有损压缩格式,广泛用于Apple设备。
  3. OGG Vorbis - 开源的有损压缩音频格式,通常用于流媒体。
  4. WMA (Windows Media Audio) - 由Microsoft开发的有损压缩格式。

其他音频格式

  1. M4A (MPEG-4 Audio) - 常用于Apple的音频文件,通常是AAC编码。
  2. Opus - 高效的有损音频编码格式,常用于实时通信和流媒体。
  3. RA (RealAudio) - 由RealNetworks开发的格式,主要用于流媒体。
  4. DTS (Digital Theater Systems) - 用于家庭影院和电影音频。
  5. AC3 (Audio Codec 3) - Dolby Digital编码格式,常用于DVD和蓝光。

特殊用途格式

  1. MIDI (Musical Instrument Digital Interface) - 主要用于乐器和音乐创作,包含控制信息而不是实际音频数据。
  2. BWF (Broadcast Wave Format) - 专业音频领域使用的扩展WAV格式,适合广播和影视制作。
  3. AU (Audio) - 由Sun Microsystems开发的音频格式,早期Unix系统常用。

上述各式分类中,最常见的恐怕就是mp3了,除此以外还有一些其他格式,如我此前在网易云下载见到过的.ogg格式文件、以及网易云、QQ音乐的无损格式都会使用的.flac文件

附加问题

除此以外,还有一个我很好奇的问题

不知道有没有人在B站缓存视频之后查看或你的缓存文件,目前我的手机的缓存文件所在路径是“内部存储/Android/data/tv.danmaku.bili/download”,进去之后缓存的视频都是一个个以数字命名的文件夹,继续向内深入三个文件夹后,你会看到如下三个文件

  • “index.json”
  • “video.m4s”
  • “audio.m4s”

想必看后两个文件名字也能明白,一个是视频文件,一个是音频文件

但m4s又是什么?

首先从上面盘点出的格式中,根本不存在m4s这种格式,而我尝试将audio文件的后缀直接从m4s修改为“.mp3”与“.aac”后,播放器都可以正常读取数据。这让我对这个格式更加疑惑和好奇了,于是我去尝试询问了一下chatgpt,于是我得到了以下答案:

m4s格式是什么文件

「m4s格式是什么文件」

M4S是一种与MPEG-4(MP4)视频文件相关的格式,常用于分段流媒体传输。M4S文件通常是DASH(动态自适应流媒体技术)协议的一部分。在DASH流媒体中,视频和音频内容被分成多个小片段,每个片段通常几秒钟长。M4S文件是这些片段中的一个,可以包含视频、音频或两者。

DASH技术允许客户端根据网络状况动态选择适合的片段,以便在不同的带宽和网络条件下都能顺畅播放视频。这种分段传输的方式有助于提高视频播放的连续性和质量。

总的来说,M4S文件是视频流的一部分,是DASH流媒体实现高效传输和播放的一种手段。

m4s格式文件中的音视频编码方式分别是什么

「m4s格式文件中的音视频编码方式分别是什么」

M4S格式文件中的音视频编码方式通常遵循以下几种标准:

  1. 视频编码

    • H.264/AVC(Advanced Video Coding):这是目前最常见的编码标准,广泛用于各种流媒体服务和设备。
    • H.265/HEVC(High Efficiency Video Coding):这是H.264的继任者,具有更高的压缩效率,适合需要高质量和低带宽的应用。
    • VP9:这是由Google开发的开源视频编解码器,常用于YouTube等平台。
  2. 音频编码

    • AAC(Advanced Audio Coding):这是最常见的音频编码标准,具有良好的音质和压缩效率。
    • MP3(MPEG-1 Audio Layer III):尽管较老,仍然被一些平台使用。
    • Opus:这是一个开源的音频编解码器,特别适合实时通信和流媒体。

在DASH流媒体系统中,M4S文件的音视频编码方式可以根据具体应用和需求进行选择。

m4s文件中的音视频可以单独储存吗

「m4s文件中的音视频可以单独储存吗」

是的,M4S文件中的音视频可以单独存储。在DASH(动态自适应流媒体技术)中,音频和视频通常被分开处理和传输,以便在不同的网络条件下实现更灵活的流媒体传输。这种方法允许客户端根据网络带宽单独选择和请求音频或视频片段,从而优化播放体验。

以下是一些实现这种分离的方法:

  1. 独立的音频和视频轨道

    • 在DASH系统中,音频和视频轨道通常是分开的,分别存储在不同的M4S文件中。客户端可以根据需要单独请求这些文件。
  2. MPD(Media Presentation Description)文件

    • MPD文件描述了媒体内容的结构,包括音频和视频片段的位置、时长等信息。通过MPD文件,客户端可以了解如何访问和播放独立的音视频片段。
  3. Manifest 文件

    • Manifest文件(如MPD文件)列出所有可用的音频和视频轨道,并包含这些轨道的URL。客户端可以使用这些URL来请求特定的音频或视频片段。

通过这种方式,DASH流媒体可以实现高效、灵活的音视频传输,确保在不同的网络条件下都能提供最佳的播放体验。

这些内容似乎已经很好的解释了我此前的疑问,但还有一点毋庸置疑,即便我将m4s后缀直接修改成mp3/aac可以正常播放,但文件的内部编码本质上并没有改变,只是因为“audio.m4s”文件中只包含了音频数据,我对后缀的修改给他提供了解码的帮助,因此他们才可以被播放出来

既然如此,正确的操作方式(转换方式)应该是什么样的呢?

如何将m4s文件中的音频转换为acc文件

「如何将m4s文件中的音频转换为acc文件」

要将M4S文件中的音频提取并转换为AAC文件,可以使用一些工具,如FFmpeg,这是一个强大的开源多媒体处理工具。下面是使用FFmpeg将M4S文件中的音频提取并转换为AAC文件的步骤:

步骤一:安装FFmpeg

  1. Windows

    • 下载FFmpeg的预编译版本:FFmpeg下载页面
    • 解压下载的压缩包,并将路径添加到系统的环境变量中。
  2. macOS

    • 使用Homebrew安装:
      1
      brew install ffmpeg
  3. Linux

    • 在大多数Linux发行版中,可以通过包管理器安装FFmpeg:
      1
      2
      sudo apt-get install ffmpeg  # Debian/Ubuntu
      sudo yum install ffmpeg # CentOS/RHEL

步骤二:提取和转换音频

  1. 打开命令行终端。
  2. 运行以下命令来提取并转换音频:
    1
    ffmpeg -i input.m4s -vn -acodec copy output.aac
    这里,-i input.m4s指定输入文件,-vn表示不处理视频部分,-acodec copy表示直接复制音频流,而不重新编码,output.aac是输出文件名。

如果需要对音频进行重新编码,可以使用以下命令:

1
ffmpeg -i input.m4s -vn -acodec aac -b:a 128k output.aac

这里,-acodec aac指定使用AAC编码器,-b:a 128k设置音频比特率为128kbps。

示例

假设有一个名为audio.m4s的M4S文件,要将其转换为audio.aac

1
ffmpeg -i audio.m4s -vn -acodec copy audio.aac

通过以上步骤,就可以将M4S文件中的音频提取并转换为AAC文件。

但很显然,上述结果只适用于单个m4s文件的转换,而像我的音乐站那种一大堆音乐的情况,一个一个执行就很复杂了,因此还有下一种解决办法

如果我有多个m4s文件想要批量转换,我应该如何操作

「如果我有多个m4s文件想要批量转换,我应该如何操作」

要批量转换多个M4S文件为AAC文件,可以使用一个脚本来自动处理所有文件。以下是使用FFmpeg和脚本实现这一目标的方法。我们可以使用不同的脚本语言来实现,以下示例展示了如何使用Bash(适用于Linux和macOS)和Batch(适用于Windows)。

使用Bash脚本(适用于Linux和macOS)

  1. 打开终端。
  2. 创建一个新的脚本文件,例如convert_m4s_to_aac.sh
    1
    nano convert_m4s_to_aac.sh
  3. 将以下内容粘贴到脚本文件中:
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash

    for file in *.m4s; do
    # 提取文件名(不含扩展名)
    base_name="${file%.*}"
    # 转换为AAC
    ffmpeg -i "$file" -vn -acodec copy "${base_name}.aac"
    done
  4. 保存并关闭文件。
  5. 为脚本添加执行权限:
    1
    chmod +x convert_m4s_to_aac.sh
  6. 运行脚本:
    1
    ./convert_m4s_to_aac.sh

使用Batch脚本(适用于Windows)

  1. 打开记事本。
  2. 将以下内容粘贴到记事本中:
    1
    2
    3
    4
    @echo off
    for %%f in (*.m4s) do (
    ffmpeg -i "%%f" -vn -acodec copy "%%~nf.aac"
    )
  3. 保存文件,命名为convert_m4s_to_aac.bat,确保文件类型选择为“所有文件(*.*)”。
  4. 在包含M4S文件的目录中,双击运行convert_m4s_to_aac.bat文件。

解释

  • Bash脚本

    • for file in *.m4s; do:循环当前目录中的所有M4S文件。
    • base_name="${file%.*}":提取文件名(不含扩展名)。
    • ffmpeg -i "$file" -vn -acodec copy "${base_name}.aac":使用FFmpeg将M4S文件转换为AAC文件。
  • Batch脚本

    • for %%f in (*.m4s) do:循环当前目录中的所有M4S文件。
    • ffmpeg -i "%%f" -vn -acodec copy "%%~nf.aac":使用FFmpeg将M4S文件转换为AAC文件。%%~nf提取文件名(不含扩展名)。

这两种方法都可以批量转换目录中的所有M4S文件为AAC文件,简化了手动处理多个文件的流程。


写在最后

至于这些音频格式的详细特征和应用场景,我会按照这里的分类将他们分别拆成四篇文章进行汇总,大家可以按照自己的感兴趣情况进行选择性阅读(毕竟一篇写的太长了会降低读者阅读兴趣嘛)

另外,上述chatgpt提供的转换方案因各种原因尚未实际尝试,如有尝试成功或其他便捷的方式欢迎您分享在评论区!(毕竟咱只是小白,没有系统学习过这些东西,所以只能尝试询问依靠一下这种ai工具。因此还望您理性看待,多多理解~)