なんだこれは

はてなダイアリーから移転しました。

テスト用各種mp3の作成方法

仕事とは関係なく、テスト用にmp3ファイルを各種作成したことがありました。
だれかいる人がいるかもしれないので、lameのwrapperを置いておきます。

mp3用(lameのwrapper)


これをwritemp3として保存して、

writemp3 hoge.mp3 1

とすると、hoge.mp3をMPEG 1 layer 3で、サンプリングレート高中低、ビットレート高中低、モード(モノラル、ステレオ、ジョイントステレオ、デュアルモノ、フォースMS)、固定ビットレート+可変ビットレート(品質高中低)の組み合わせで変換し、作成します。

最初のhoge.mp3は別にlameが読めればなんでもいいです。

#!/bin/bash

# writemp3 -- make mp3 files from original mp3

# Usage
#  writemp3 original-file {1:MPEG 1 layer 3, 2:MPEG 2 layer 3, 3:MPEG 2.5 layer3}  
#  if number is not given, treat as 1

# Author:fu7mu4

# Licence:NEW BSD LICENCE

# Var
ORGMP3=$1     # source file
MPEGVER=$2     # 1: MPEG1 Layer3 2: MPEG2 Layer3 3:MPEG3 Layer3

LOW="1"
MID="2"
HIGH="3"
STR[$LOW]="1LOW_"
STR[$MID]="2MID_"
STR[$HIGH]="3HIGH"

MONO="1"
STER="2"
JOINT="3"
DUAL="4"
FORCE="5"
TYPE[$MONO]="1MONO_"
TYPE[$STER]="2STERO"
TYPE[$JOINT]="3JOINT"
TYPE[$DUAL]="4DUAL_"
TYPE[$FORCE]="5FORCE"

STYPE[$MONO]="m"
STYPE[$STER]="s"
STYPE[$JOINT]="j"
STYPE[$DUAL]="d"
STYPE[$FORCE]="f"

#if $MPEGVER is not given, treat as MPEG1

MPEGSTR="MPEG1.0"
SAMPLE[$LOW]="32"
SAMPLE[$MID]="44.1"
SAMPLE[$HIGH]="48"
BITRATE[$LOW]="32"
BITRATE[$MID]="128"
BITRATE[$HIGH]="320"

if [ $MPEGVER == "2" ]; then
    MPEGSTR="MPEG2.0"
    SAMPLE[$LOW]="16"
    SAMPLE[$MID]="22.05"
    SAMPLE[$HIGH]="24"
    BITRATE[$LOW]="8"
    BITRATE[$MID]="128"
    BITRATE[$HIGH]="160"
fi

if [ $MPEGVER == "3" ]; then
    MPEGSTR="MPEG2.5"
    SAMPLE[$LOW]="8"
    SAMPLE[$MID]="11.025"
    SAMPLE[$HIGH]="12"
    BITRATE[$LOW]="8"
    BITRATE[$MID]="48"
    BITRATE[$HIGH]="64"
fi

CBR="0"
VBR1="1"
VBR2="2"
VBR3="3"

BRTYPE[$CBR]="0CBR---"
BRTYPE[$VBR1]="1VBR-LQ"
BRTYPE[$VBR2]="2VBR-MQ"
BRTYPE[$VBR3]="3VBR-HQ"

VBROP[$VBR1]="9"
VBROP[$VBR2]="4"
VBROP[$VBR3]="0"


for s in $LOW $MID $HIGH ; do
    for b in $LOW $MID $HIGH; do
	for mode in $MONO $STER $JOINT $DUAL $FORCE ; do

	    #CBR

	    #name output
            outputfilename="${MPEGSTR}_"
	    outputfilename="${outputfilename}${TYPE[$mode]}_"
	    outputfilename="${outputfilename}${BRTYPE[$CBR]}_"
	    outputfilename="${outputfilename}${STR[$s]}${STR[$b]}_"
	    outputfilename="${outputfilename}${SAMPLE[$s]}kHz"
	    outputfilename="${outputfilename}${BITRATE[$b]}kbps.mp3"
	    
	    #make CBR file by lame
	    lame -m "${STYPE[$mode]}" --resample "${SAMPLE[$s]}" \
		-b "${BITRATE[$b]}" $ORGMP3 $outputfilename 

	    #VBR

	    for v in $VBR1 $VBR2 $VBR3 ; do

		#name output
		outputfilename="${MPEGSTR}_"
		outputfilename="${outputfilename}${TYPE[$mode]}_"
		outputfilename="${outputfilename}${BRTYPE[$v]}_"
		outputfilename="${outputfilename}${STR[$s]}${STR[$b]}_"
		outputfilename="${outputfilename}${SAMPLE[$s]}kHz"
		outputfilename="${outputfilename}${BITRATE[$b]}kbps.mp3"

		#mae VBR
		lame -m "${STYPE[$mode]}" --resample "${SAMPLE[$s]}" \
		    -v -V "${VBEOP[$v]}" -b "${BITRATE[$b]}" \
		    $ORGMP3 $outputfilename
	    done

	done
    done
done

mp2用(twolameのwrapper)

こちらは、soxとtwolameのwrapperです。
MPEG1/22.5のlayer2を上と同じように生成します。

#!/bin/bash

# writemp2 -- make mp2 files from original mp3

# Usage

# writemp3 original {1 for MPEG 1, 2 for MPEG 2}  

# Author : fu7mu4
# Licence: NEW BSD LICENCE

#Var
ORGMP3=$1     # source file
MPEGVER=$2     # 1: MPEG1 Layer3 2: MPEG2 Layer3

LOW="1"
MID="2"
HIGH="3"
STR[$LOW]="1LOW_"
STR[$MID]="2MID_"
STR[$HIGH]="3HIGH"

MONO="1"
STER="2"
JOINT="3"
DUAL="4"
FORCE="5"
TYPE[$MONO]="1MONO_"
TYPE[$STER]="2STERO"
TYPE[$JOINT]="3JOINT"
TYPE[$DUAL]="4DUAL_"

STYPE[$MONO]="m"
STYPE[$STER]="s"
STYPE[$JOINT]="j"
STYPE[$DUAL]="d"

#if [ $MPEGVER == "1" ]; then
    MPEGSTR="MPEG1.0"
    SAMPLE[$LOW]="32000"
    SAMPLE[$MID]="44100"
    SAMPLE[$HIGH]="48000"
    BITRATE[$LOW]="32"
    BITRATE[$MID]="192"
    BITRATE[$HIGH]="320"
#fi

if [ $MPEGVER == "2" ]; then
    MPEGSTR="MPEG2.0"
    SAMPLE[$LOW]="16000"
    SAMPLE[$MID]="22050"
    SAMPLE[$HIGH]="24000"
    BITRATE[$LOW]="8"
    BITRATE[$MID]="40"
    BITRATE[$HIGH]="144"
fi

CBR="0"
VBR1="1"
VBR2="2"
VBR3="3"

BRTYPE[$CBR]="0CBR---"
BRTYPE[$VBR1]="1VBR-LQ"
BRTYPE[$VBR2]="2VBR-MQ"
BRTYPE[$VBR3]="3VBR-HQ"

VBROP[$VBR1]="-10"
VBROP[$VBR2]="0"
VBROP[$VBR3]="+10"

for s in $LOW $MID $HIGH ; do
    for b in $LOW $MID $HIGH; do
	for mode in $MONO $STER $JOINT $DUAL ; do

	    #CBR

	    #name output
            outputfilename="${MPEGSTR}_"
	    outputfilename="${outputfilename}${TYPE[$mode]}_"
	    outputfilename="${outputfilename}${BRTYPE[$CBR]}_"
	    outputfilename="${outputfilename}${STR[$s]}${STR[$b]}_"
	    outputfilename="${outputfilename}${SAMPLE[$s]}Hz"
	    outputfilename="${outputfilename}${BITRATE[$b]}kbps.mp2"
	    
	    #make CBR file by lame

	    sox "$ORGMP3" -r "${SAMPLE[$s]}" - | \
	   	twolame -r -s "${SAMPLE[$s]}" -b "${BITRATE[$b]}" \
		-m "${STYPE[$mode]}" - "$outputfilename"
	    #VBR

	    for v in $VBR1 $VBR2 $VBR3 ; do

		#name output
		outputfilename="${MPEGSTR}_"
		outputfilename="${outputfilename}${TYPE[$mode]}_"
		outputfilename="${outputfilename}${BRTYPE[$v]}_"
		outputfilename="${outputfilename}${STR[$s]}${STR[$b]}_"
		outputfilename="${outputfilename}${SAMPLE[$s]}Hz"
		outputfilename="${outputfilename}${BITRATE[$b]}kbps.mp2"

		#mae VBR
	    	sox "$ORGMP3" -t raw -r "${SAMPLE[$s]}" - | \
	   		twolame -r -s "${SAMPLE[$s]}" -b "${BITRATE[$b]}" \
			-m "${STYPE[$mode]}" -V "${VBEOP[$v]}" -  "$outputfilename"
	    done
	done
    done
done