voxceleb2将m4a格式转换为wav

最近尝试新的模型中,要求Voxceleb2数据集的格式为.wav,而原文件的格式为.m4a格式,需要进行转换。其实网上是有相关的开源工程的,https://github.com/clovaai/voxceleb_trainer,但是由于这个作者的注释写的非常少,在没有人帮助的情况下我也看不太懂多少,只能自己根据https://www.robots.ox.ac.uk/~vgg/data/voxceleb/meta/train_list.txt所提供的trainlist列表自行转换。

于是,我写了如下代码:

2a96740a65c44c7b9c69aedf44bb30d9.png

 目的文件夹的创建部分,在我做完之后就已经删除了。我是直接将原文件生成wav格式之后,改一个后缀名就放在了目录下面。

但是在我跑了一晚上之后才发现,原本数据集的音频标号方式是每个video编一个号码,而trainlist中是每一个人编一个号码。不能用简单的直接将原始的m4a文件换个后缀就直接生成,还要涉及到一个编号的问题。

于是我稍加调整,更改的代码如下:

aed2a13587dc47f98a35c9cb88d7194d.png

 这样就按文件顺序,按说话人生成连续编号的wav文件了。

但是在跑了一段脚本之后,我进行检查发现,我的编号和list中的编号不一致。仔细检查才发现,原来trainlist中的排序顺序是0-9-A-Z-a-z-*,而linux系统下的文件排序顺序则是0-9-Aa-Zz-*。会导致不同目录下的标号顺序是交错的。

因此不能直接按照原始的数据集文件进行直接生成,还是需要读取trainlist文件,按行生成连续编号的wav文件。

#!/bin/bash
  
outpath=-------                        # 你自己的目录       
listfile=-------/train_list.txt        # 你存放的trianlist的位置

for directory in */* ; do

        [ ! -d $outpath/$video ] && mkdir -p $outpath/$directory

done


while read line ; do
        wav=`echo $line | awk '{printf($2)}'`
        m4a=${wav%.*}.m4a
        [ -f $m4a ] && [ ! -f $outpath/$wav ] && ffmpeg -y -i $m4a -ac 1 -vn -acodec pcm_s16le -ar 16000 $outpath/$wav

        [ ! -f $m4a ] && echo -e "\n\n\n\nit went wrong! can not found $m4a!\n" && exit 0
done < $listfile

如上,就可以按行读取trianlist中的文件并进行转换,同时输出到相同的文件夹中了。由于写的非常原始,也没有开很多个进程来处理这个工程,导致这个跑的很慢,大概需要16h左右。同时,这个脚本需要存放在原始的v2数据集的dev/aac/目录下,与id*****处于同一位置。

也希望各位如果能用懂voxceleb_trainer的,也可以在评论区留言,或者开一个csdn帖子来介绍一下这个工程,谢谢各位!请多多指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值