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

时间:2015-03-12 02:51:56

标签: xml bash zip

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

Example

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

示例:

<playlist>
    <playlistversion>1.0</playlistversion>
    <item>daudio\localaudio\Q2013\0989\0001\</item>
    <item>daudio\localaudio\Q2013\0989\0002\</item>
    <item>daudio\localaudio\Q2013\0989\0003\</item>
    <item>daudio\localaudio\Q2013\0989\0004\</item>
    <item>daudio\localaudio\Q2013\0989\0005\</item>
</playlist>

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

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

  1. 解压缩已打包的文件夹
  2. 进入播放列表XML中引用的每个文件夹,并以正确的顺序加入它包含的每个文件。
  3. 将每个文件夹中的每个连接文件合并到一个最终的主文件中。
  4. 将此主文件重命名为与原始zip相同,但使用.mp3文件名
  5. 以下是一个示例文件:http://cl.ly/aAwB

2 个答案:

答案 0 :(得分:0)

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

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

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

无需使用python过度复杂化。

答案 1 :(得分:0)

您可以使用一个小脚本

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

注意:

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

      

    <强> -p
      将文件解压缩到管道(stdout)。除了将文件数据发送到stdout之外,文件总是以二进制格式提取             因为它们被存储(没有转换)。

  •   
  • 路径中的第一个basename是为了避免提取__MACOSX/路径
  •   
  • 最后>重定向到一个名称相同但扩展名为mp3的新文件。
  •   

     

PS&GT;如果您只想在一行中看到它,可以使用

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

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