完美解决个人微信音频amr文件与mp3格式互转
1、安装gcc ffmpeg

wget http://downloads.sourceforge.net/lame/lame-3.100.tar.gz 

 tar -zxvf lame-3.100.tar.gz 

 cd lame-3.100 

 ./configure --prefix=/usr/local 

 make && make install 

 ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0 

 wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2 

 tar -jxvf ffmpeg-3.4.1.tar.bz2 

 cd ffmpeg-3.4.1 

 ./configure --prefix=/usr/local --pkg-config-flags=--static --enable-libmp3lame --disable-x86asm 

 make && make install
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.



2、安装/silk-v3-decoder

cd /usr/local/soft 

 wget https://github.com/kn007/silk-v3-decoder/archive/master.zip 

 unzip master.zip 

 chmod -R +x /usr/local/soft/silk-v3-decoder-master/ 

 silk-v3-decoder/converter.sh 微信amr文章文件路径名 mp3
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.



3、改造一个encoder脚本,decoder已经有了不用改造了

converter-encoder.sh(请拷贝以下脚本放到silk-v3-decoder-master目录下) 


 #!/bin/bash 

 # File: converter.sh 

 # Date: August 19th, 2016 

 # Time: 18:56:52 +0800 

 # Author: http://www.wityx.com/post/824_1_1.html 

 # Blog: https://kn007.net 

 # Link: https://github.com/kn007/silk-v3-encoder 

 # Usage: sh converter.sh silk_v3_file/input_folder output_format/output_folder flag(format) 

 # Flag: not define ---- not define, convert a file 

 # other value ---- format, convert a folder, batch conversion support 

 # Requirement: gcc ffmpeg 


 # Colors 

 RED="$(tput setaf 1 2>/dev/null || echo '\e[0;31m')" 

 GREEN="$(tput setaf 2 2>/dev/null || echo '\e[0;32m')" 

 YELLOW="$(tput setaf 3 2>/dev/null || echo '\e[0;33m')" 

 WHITE="$(tput setaf 7 2>/dev/null || echo '\e[0;37m')" 

 RESET="$(tput sgr 0 2>/dev/null || echo '\e[0m')" 


 # Main 

 cur_dir=$(cd `dirname $0`; pwd) 


 if [ ! -r "$cur_dir/silk/encoder" ]; then 

 echo -e "${WHITE}[Notice]${RESET} Silk v3 Encoder is not found, compile it." 

 cd $cur_dir/silk 

 make && make encoder 

 [ ! -r "$cur_dir/silk/encoder" ]&&echo -e "${RED}[Error]${RESET} Silk v3 Encoder Compile False, Please Check Your System For GCC."&&exit 

 echo -e "${WHITE}========= Silk v3 Encoder Compile Finish =========${RESET}" 

 fi 


 cd $cur_dir 


 while [ $3 ]; do 

 [[ ! -z "$(pidof ffmpeg)" ]]&&echo -e "${RED}[Error]${RESET} ffmpeg is occupied by another application, please check it."&&exit 

 [ ! -d "$1" ]&&echo -e "${RED}[Error]${RESET} Input folder not found, please check it."&&exit 

 TOTAL=$(ls $1|wc -l) 

 [ ! -d "$2" ]&&mkdir "$2"&&echo -e "${WHITE}[Notice]${RESET} Output folder not found, create it." 

 [ ! -d "$2" ]&&echo -e "${RED}[Error]${RESET} Output folder could not be created, please check it."&&exit 

 CURRENT=0 

 echo -e "${WHITE}========= Batch Conversion Start ==========${RESET}" 

 ls $1 | while read line; do 

 let CURRENT+=1 

 ffmpeg -i "$1/$line" -f s16le -ar 24000 -ac 1 -acodec pcm_s16le "$2/$line.pcm" > /dev/null 2>&1  

 $cur_dir/silk/encoder "$2/$line.pcm" "$2/${line%.*}.$3" -tencent > /dev/null 2>&1 

 rm "$2/$line.pcm" 

 [ ! -f "$2/${line%.*}.$3" ]&&echo -e "[$CURRENT/$TOTAL]${YELLOW}[Warning]${RESET} Convert $line false, maybe ffmpeg no format handler for $3."&&continue 

 echo -e "[$CURRENT/$TOTAL]${GREEN}[OK]${RESET} Convert $line To ${line%.*}.$3 Finish." 

 done 

 echo -e "${WHITE}========= Batch Conversion Finish =========${RESET}" 

 exit 

 done 


 ffmpeg -i "$1" -f s16le -ar 24000 -ac 1 -acodec pcm_s16le "$1.pcm" > /dev/null 2>&1  

 $cur_dir/silk/encoder "$1.pcm" "${1%.*}.amr" -tencent > /dev/null 2>&1 

 rm "$1.pcm" 

 [ ! -f "${1%.*}.amr" ]&&echo -e "${YELLOW}[Warning]${RESET} Convert $1 false, maybe ffmpeg no format handler for amr."&&exit 

 echo -e "${GREEN}[OK]${RESET} Convert $1 To ${1%.*}.amr Finish." 

 exit
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.



完美解决  个人微信音频amr文件与mp3格式互转
4、用java调用脚本

private static String silkv3Path="/usr/local/soft/silk-v3-decoder-master/"; 


 /** 

 * 将amr转成mp3,参考http://www.wityx.com/post/824_1_1.html 

 * @param coderPath 

 * @param amrfilePath 

 */ 

 public static void converterDecoderMp3(String coderPath, String amrfilePath) { 

 if(StringUtils.isBlank(coderPath)){ 

 coderPath = silkv3Path; 

 } 

 String decoderCmd = coderPath + "converter.sh " + amrfilePath; 

 exeCmd(decoderCmd); 

 } 


 /** 

 * 将mp3转成amr,参考http://www.wityx.com/post/824_1_1.html 

 * @param coderPath 

 * @param mp3filePath 

 */ 

 public static void converterEncoderAmr(String coderPath, String mp3filePath) { 

 if(StringUtils.isBlank(coderPath)){ 

 coderPath = silkv3Path; 

 } 

 String encoderCmd= coderPath + "converter-encoder.sh " + mp3filePath; 

 exeCmd(encoderCmd); 

 } 


 private static void exeCmd(String commandStr) { 

 BufferedReader br = null; 

 try { 

 Process p = Runtime.getRuntime().exec(commandStr); 

 br = new BufferedReader(new InputStreamReader(p.getInputStream())); 

 String line = null; 

 StringBuilder sb = new StringBuilder(); 

 while ((line = br.readLine()) != null) { 

 sb.append(line + "\n"); 

 } 

 System.out.println(sb.toString()); 

 } catch (Exception e) { 

 e.printStackTrace(); 

 } finally { 

 if (br != null) { 

 try { 

 br.close(); 

 } catch (Exception e) { 

 e.printStackTrace(); 

 } 

 } 

 } 

 } 

 public static void main(String[] args) { 

 String amrfilePath = "/home/1.amr"; 

 String mp3filePath = "/home/3.mp3"; 

 String coderPath = silkv3Path; 

 converterDecoderMp3(coderPath, mp3filePath); 

 converterEncoderAmr(coderPath, amrfilePath); 

 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.