音频格式汇总盘点|m4s问题解惑
系列文章
前不久在捣鼓自己的音乐网站时突发奇想,十分好奇音频格式都有哪些种以及都有什么特点。正巧遇到了一个音频转换器,上面提供了九种音频格式。秉着探索一下的原则去搜寻,结果发现数量居然超乎想象,很多音频格式都是从来没有见到过的。
于是借此契机,我也打算盘点科普一下音频文件格式的一些相关内容。
免责声明:以下部分内容信息来源于网络与chatgpt询问结果,如有纰漏敬请指正~
盘点音频格式
根据目前查找到的所有结果,大致将音频格式分以下几类
无损压缩格式
- WAV (Waveform Audio File Format) - 常见的未压缩音频格式,由Microsoft和IBM开发。
- AIFF (Audio Interchange File Format) - 苹果公司开发的未压缩音频格式。
- FLAC (Free Lossless Audio Codec) - 常见的无损压缩音频格式,广泛使用。
- ALAC (Apple Lossless Audio Codec) - 苹果公司的无损压缩音频格式。
- APE (Monkey’s Audio) - 另一种无损压缩音频格式。
有损压缩格式
- MP3 (MPEG-1 Audio Layer 3) - 最常见的有损压缩音频格式,广泛应用于各种音频设备。
- AAC (Advanced Audio Coding) - 比MP3更高效的有损压缩格式,广泛用于Apple设备。
- OGG Vorbis - 开源的有损压缩音频格式,通常用于流媒体。
- WMA (Windows Media Audio) - 由Microsoft开发的有损压缩格式。
其他音频格式
- M4A (MPEG-4 Audio) - 常用于Apple的音频文件,通常是AAC编码。
- Opus - 高效的有损音频编码格式,常用于实时通信和流媒体。
- RA (RealAudio) - 由RealNetworks开发的格式,主要用于流媒体。
- DTS (Digital Theater Systems) - 用于家庭影院和电影音频。
- AC3 (Audio Codec 3) - Dolby Digital编码格式,常用于DVD和蓝光。
特殊用途格式
- MIDI (Musical Instrument Digital Interface) - 主要用于乐器和音乐创作,包含控制信息而不是实际音频数据。
- BWF (Broadcast Wave Format) - 专业音频领域使用的扩展WAV格式,适合广播和影视制作。
- 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格式文件中的音视频编码方式通常遵循以下几种标准:
视频编码:
- H.264/AVC(Advanced Video Coding):这是目前最常见的编码标准,广泛用于各种流媒体服务和设备。
- H.265/HEVC(High Efficiency Video Coding):这是H.264的继任者,具有更高的压缩效率,适合需要高质量和低带宽的应用。
- VP9:这是由Google开发的开源视频编解码器,常用于YouTube等平台。
音频编码:
- AAC(Advanced Audio Coding):这是最常见的音频编码标准,具有良好的音质和压缩效率。
- MP3(MPEG-1 Audio Layer III):尽管较老,仍然被一些平台使用。
- Opus:这是一个开源的音频编解码器,特别适合实时通信和流媒体。
在DASH流媒体系统中,M4S文件的音视频编码方式可以根据具体应用和需求进行选择。
m4s文件中的音视频可以单独储存吗
「m4s文件中的音视频可以单独储存吗」
是的,M4S文件中的音视频可以单独存储。在DASH(动态自适应流媒体技术)中,音频和视频通常被分开处理和传输,以便在不同的网络条件下实现更灵活的流媒体传输。这种方法允许客户端根据网络带宽单独选择和请求音频或视频片段,从而优化播放体验。
以下是一些实现这种分离的方法:
独立的音频和视频轨道:
- 在DASH系统中,音频和视频轨道通常是分开的,分别存储在不同的M4S文件中。客户端可以根据需要单独请求这些文件。
MPD(Media Presentation Description)文件:
- MPD文件描述了媒体内容的结构,包括音频和视频片段的位置、时长等信息。通过MPD文件,客户端可以了解如何访问和播放独立的音视频片段。
Manifest 文件:
- Manifest文件(如MPD文件)列出所有可用的音频和视频轨道,并包含这些轨道的URL。客户端可以使用这些URL来请求特定的音频或视频片段。
通过这种方式,DASH流媒体可以实现高效、灵活的音视频传输,确保在不同的网络条件下都能提供最佳的播放体验。
这些内容似乎已经很好的解释了我此前的疑问,但还有一点毋庸置疑,即便我将m4s后缀直接修改成mp3/aac可以正常播放,但文件的内部编码本质上并没有改变,只是因为“audio.m4s”文件中只包含了音频数据,我对后缀的修改给他提供了解码的帮助,因此他们才可以被播放出来
既然如此,正确的操作方式(转换方式)应该是什么样的呢?
如何将m4s文件中的音频转换为acc文件
「如何将m4s文件中的音频转换为acc文件」
要将M4S文件中的音频提取并转换为AAC文件,可以使用一些工具,如FFmpeg,这是一个强大的开源多媒体处理工具。下面是使用FFmpeg将M4S文件中的音频提取并转换为AAC文件的步骤:
步骤一:安装FFmpeg
Windows:
- 下载FFmpeg的预编译版本:FFmpeg下载页面。
- 解压下载的压缩包,并将路径添加到系统的环境变量中。
macOS:
- 使用Homebrew安装:
1
brew install ffmpeg
- 使用Homebrew安装:
Linux:
- 在大多数Linux发行版中,可以通过包管理器安装FFmpeg:
1
2sudo apt-get install ffmpeg # Debian/Ubuntu
sudo yum install ffmpeg # CentOS/RHEL
- 在大多数Linux发行版中,可以通过包管理器安装FFmpeg:
步骤二:提取和转换音频
- 打开命令行终端。
- 运行以下命令来提取并转换音频:这里,
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)
- 打开终端。
- 创建一个新的脚本文件,例如
convert_m4s_to_aac.sh
:1
nano convert_m4s_to_aac.sh
- 将以下内容粘贴到脚本文件中:
1
2
3
4
5
6
7
8
for file in *.m4s; do
# 提取文件名(不含扩展名)
base_name="${file%.*}"
# 转换为AAC
ffmpeg -i "$file" -vn -acodec copy "${base_name}.aac"
done - 保存并关闭文件。
- 为脚本添加执行权限:
1
chmod +x convert_m4s_to_aac.sh
- 运行脚本:
1
./convert_m4s_to_aac.sh
使用Batch脚本(适用于Windows)
- 打开记事本。
- 将以下内容粘贴到记事本中:
1
2
3
4@echo off
for %%f in (*.m4s) do (
ffmpeg -i "%%f" -vn -acodec copy "%%~nf.aac"
) - 保存文件,命名为
convert_m4s_to_aac.bat
,确保文件类型选择为“所有文件(*.*)”。 - 在包含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工具。因此还望您理性看待,多多理解~)
- 感谢您的赞赏