使用 bash 将专有音频包格式解码为 mp3 文件

Decode a proprietary audio package format into mp3 file using bash

我有一个以 .zip 格式提供的专有打包文件。这些文件的内容始终遵循相同的结构。

根文件夹中有一个 XML 文件(播放列表),其中列出了包含音频文件的文件夹。

示例:

<playlist>
    <playlistversion>1.0</playlistversion>
    <item>daudio\localaudio\Q201389[=11=]01\</item>
    <item>daudio\localaudio\Q201389[=11=]02\</item>
    <item>daudio\localaudio\Q201389[=11=]03\</item>
    <item>daudio\localaudio\Q201389[=11=]04\</item>
    <item>daudio\localaudio\Q201389[=11=]05\</item>
</playlist>

这些文件夹中的每一个都包含一个音频文件,该文件被分成具有连续命名扩展名的块。

我需要编写一个脚本来执行以下操作:

  1. 解压打包好的文件夹
  2. 进入播放列表 XML 中引用的每个文件夹,并以正确的顺序加入其中包含的每个文件。
  3. 将每个文件夹中的每个合并文件合并到一个最终的主文件中。
  4. 将此主文件重命名为与原始 zip 文件相同的名称,但使用 .mp3 文件名

这是一个示例文件:http://cl.ly/aAwB

使用 dd 将文件与 bash 脚本合并。

http://www.linuxquestions.org/linux/answers/applications_gui_multimedia/splitting_and_merging_files_using_dd

一个带find的for循环可以找到所有的文件。由于它们是按顺序命名的,您只需使用 dd 和 stat 将所有文件 link 放在一起。

不需要用 python 把事情复杂化。

你可以用一个小脚本来完成

#!/bin/bash
[ ! -e  ]  && exit 9                  # Exit if file doesn't exists 
unzip -p  $(basename  .zip)/*/*/*/*/*.a* >$(basename  .zip).mp3

备注:

  • 第一次测试[ ! -e ]确保zip文件存在
  • 选项unzip -p

    -p
    extract files to pipe (stdout). Nothing but the file data is sent to stdout, and the files are always extracted in binary format, just as they are stored (no conversions).

  • The first basename in the path is to avoid the __MACOSX/ path to be extracted
  • Finally > redirect to a new file that has the same name but mp3 extension.


Ps> 如果你想在一行中看到它,你可以使用

[ -e  ] && unzip -p  $(basename  .zip)/*/*/*/*/*.a* >$(basename  .zip).mp3

如果成功,两个版本都将以代码 0 退出,如果找不到文件,则以代码 9 退出,或者以解压缩的退出代码退出。 我建议您添加一些额外的控件来检查输出文件是否存在,输入文件是否为 zip 文件,扩展名是否为 .zip ...