最近从皇后OpenMV下了若干KTV歌库。
KTV文件包含两个音轨,一个是正常音轨,和MV一样,另一个音轨只有伴奏。
想把其中的伴奏提出来,成功从鸟之家找到方法。
需要用到mplayer,mencoder及解码器。
测试环境:Ubuntu 12.10,
第一步:
先用”mplayer filename”命令确定需要提取的音轨。filename为指向文件的路径。
Playing /home/nerd/音乐/国语-梁静茹-可惜不是你.mpg.
Detected file format: MPEG-PS format (libavformat)
[mpeg @ 0xb5eca5e0]max_analyze_duration reached
[lavf] stream 0: video (mpeg2video), -vid 0
[lavf] stream 1: audio (mp2), -aid 0
[lavf] stream 2: audio (mp2), -aid 1
VIDEO: [MPG2] 720×480 0bpp 29.970 fps 9200.0 kbps (1123.0 kbyte/s)
上面从终端截取的部分提示可以看到,共有两条音轨,aid分别为0和1,通过“mplayer filename -aid 0或1″来确定哪条音轨是伴奏音轨。
执行:
mencoder filename -ovc frameno -oac mp3lame -lameopts cbr:br=320 -aid 1 -o novideo.avi
- -ovc frameno表示不进行视频转换
- -oac mp3lame表示转换为mp3,使用的是lame
- -lameopts cbr:br=320表示输出码率为320kbps
- -aid 1表示提取的音轨ID为1
- -o novideo.avi表示输出文件为novideo.avi
生成一个只有音频的avi文件。
第二步:
就会生成“国语-梁静茹-可惜不是你.mp3”文件。删除“novideo.avi”文件即可。
可以用脚本来简化步骤。
#!/bin/bash
mencoder $1 -ovc frameno -oac mp3lame -lameopts cbr:br=320 -aid $2 -o novideo.avi
Filename=`basename $1` #去除路径
NAME=`echo “$Filename” | cut -d’.’ -f1` #去除后缀
mplayer -dumpaudio novideo.avi -dumpfile $NAME.mp3
rm novideo.avi
保存为“2mp3.sh”文件,执行“chmod +x 2mp3.sh”。
执行“./2mp3.sh 文件名 音轨id”即可。
以上使用的是OpenMV的KTV歌库,能正常提取。
为了测试从PT80下了部分KTV,播放正常,但是输出的AVI文件不到200KB,无法播放,终端提示:
Too many video packets in the buffer: (4096 in 8264760 bytes).
Maybe you are playing a non-interleaved stream/file or the codec failed?
For AVI files, try to force non-interleaved mode with the -ni option.
MPEG: No audio stream found -> no sound.
增加了-ni选项无效果。原因不明。
废话不多说,命令如下: