場(chǎng)景
? mac上想將avi格式的視頻轉(zhuǎn)mp3文件凶异,然后就是百度啊百度啊。
ffmpeg
? FFmpeg是一套可以用來(lái)記錄挤巡、轉(zhuǎn)換數(shù)字音頻剩彬、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序矿卑。采用LGPL或GPL許可證喉恋。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案粪摘。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec瀑晒,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開(kāi)發(fā)的徘意。
? 接著安裝苔悦,因?yàn)閙ac中已經(jīng)有brew了,所以呢椎咧,直接brew installffmpeg玖详,然后就是complete;
ffmpeg的簡(jiǎn)單使用
音頻轉(zhuǎn)換:
1.轉(zhuǎn)換amr到mp3:
ffmpeg -i shenhuxi.amr amr2mp3.mp3
2.轉(zhuǎn)換amr到wav:
ffmpeg -acodec libamr_nb -i shenhuxi.amr amr2wav.wav
3.轉(zhuǎn)換mp3到wav:
ffmpeg -i DING.mp3 -f wav test.wav
4.轉(zhuǎn)換wav到amr:
ffmpeg -i test.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 wav2amr.amr ffmpeg.exe -i PA003.wav -ar 8000 -ab 12.2k -ac 1 target.amr 此方法驗(yàn)證通過(guò) 文章來(lái)自http://blog.csdn.net/tylz04/article/details/9041739 測(cè)試程序下載:http://files.cnblogs.com/xiaofengfeng/WavConvertAmr.zip 已測(cè)試過(guò)將WAV轉(zhuǎn)AMR格式勤讽。 下載地址http://ftp.pconline.com.cn/d56bb83a0a66440d54ef5473f548e4b9/pub/download/201010/ffmpeg-20131021.zip
5.轉(zhuǎn)換wav到mp3:
ffmpeg -i test.wav -f mp3 -acodec libmp3lame -y wav2mp3.mp3
實(shí)踐
? 難道你要一個(gè)程序員command+c/v蟋座,然后就想到了shell腳本,吭哧吭哧的開(kāi)車(chē)脚牍。
shell腳本實(shí)踐
1向臀、寫(xiě)好自己的 腳本,比如aa.sh
2诸狭、打開(kāi)終端 執(zhí)行券膀,方法一: 輸入命令 ./aa.sh ,
方法二:直接把 aa.sh 拖入到終端里面君纫。
注意事項(xiàng):
如果 沒(méi)有成功報(bào)出問(wèn)題::
Permission denied。就是沒(méi)有權(quán)限芹彬。
解決辦法:
修改該文件aa.sh 的權(quán)限 :使用命令:
chmod 777 aa.sh 蓄髓。
shell代碼
function getdir(){
IFS=$'\n';
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dir_or_file ]
then
getdir $dir_or_file
else
ffmpeg -i $dir_or_file $dir_or_file.mp3
echo $dir_or_file
fi
done
}
root_dir="/Users/y/Documents/y/Prepare/audio"
getdir $root_dir
補(bǔ)充一下
if...fi 語(yǔ)句的基本控制語(yǔ)句,它允許Shell有條件作出決定并執(zhí)行語(yǔ)句舒帮。
語(yǔ)法
if [ expression ] then Statement(s) to be executed if expression is true fi
Shell expression求值会喝。如果結(jié)果值是true,給定statement被執(zhí)行玩郊。如果 expression 為false 肢执,則沒(méi)有語(yǔ)句將不會(huì)被執(zhí)行。大部分的時(shí)候译红,會(huì)使用比較操作符決策蔚万。
關(guān)注對(duì)括號(hào)和表達(dá)之間的空間。這個(gè)空間是強(qiáng)制性的临庇,否則語(yǔ)法錯(cuò)誤。
如果expression 是一個(gè)shell命令昵慌,那么它會(huì)被假定如此假夺,如果它執(zhí)行后返回0。如果它是一個(gè)布爾表達(dá)式斋攀,那么返回true已卷。
例子:
#!/bin/sh a=10 b=20 if [ $a == $b ] then echo "a is equal to b" fi if [ $a != $b ] then echo "a is not equal to b" fi
語(yǔ)法
for var in word1 word2 ... wordN do Statement(s) to be executed for every word. done
var是一個(gè)變量,word1 到 wordN 是由空格分隔的字符(字)序列的名稱(chēng)淳蔼。每次for 循環(huán)的執(zhí)行侧蘸,變量var的值被設(shè)置為下一個(gè)單詞的列表中的字,word1 到 wordN 鹉梨。
例子:
下面是一個(gè)簡(jiǎn)單的例子讳癌,它使用for循環(huán)跨越通過(guò)給定的數(shù)字列表:
#!/bin/sh for var in 0 1 2 3 4 5 6 7 8 9 do echo $var done
這將產(chǎn)生以下結(jié)果:
0 1 2 3 4 5 6 7 8 9
- 注意:一開(kāi)始沒(méi)有加IFS=$'\n'的時(shí)候,遍歷文件名帶空格的時(shí)候存皂,會(huì)將空格符單做分隔符晌坤,然后拆成多個(gè)文件。
- 原因:默認(rèn)情況下'\n'會(huì)被當(dāng)做分隔符進(jìn)行解析旦袋,通過(guò)IFS骤菠,可以會(huì)略掉'\n',這就是問(wèn)題的原因嘍。