使用 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>
这些文件夹中的每一个都包含一个音频文件,该文件被分成具有连续命名扩展名的块。
我需要编写一个脚本来执行以下操作:
- 解压打包好的文件夹
- 进入播放列表 XML 中引用的每个文件夹,并以正确的顺序加入其中包含的每个文件。
- 将每个文件夹中的每个合并文件合并到一个最终的主文件中。
- 将此主文件重命名为与原始 zip 文件相同的名称,但使用 .mp3 文件名
这是一个示例文件:http://cl.ly/aAwB
使用 dd 将文件与 bash 脚本合并。
一个带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
...
我有一个以 .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>
这些文件夹中的每一个都包含一个音频文件,该文件被分成具有连续命名扩展名的块。
我需要编写一个脚本来执行以下操作:
- 解压打包好的文件夹
- 进入播放列表 XML 中引用的每个文件夹,并以正确的顺序加入其中包含的每个文件。
- 将每个文件夹中的每个合并文件合并到一个最终的主文件中。
- 将此主文件重命名为与原始 zip 文件相同的名称,但使用 .mp3 文件名
这是一个示例文件:http://cl.ly/aAwB
使用 dd 将文件与 bash 脚本合并。
一个带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 butmp3
extension.
Ps> 如果你想在一行中看到它,你可以使用
[ -e ] && unzip -p $(basename .zip)/*/*/*/*/*.a* >$(basename .zip).mp3
如果成功,两个版本都将以代码 0 退出,如果找不到文件,则以代码 9 退出,或者以解压缩的退出代码退出。
我建议您添加一些额外的控件来检查输出文件是否存在,输入文件是否为 zip 文件,扩展名是否为 .zip
...