記一次簡單的腳本使用(ffmpeg、shell、IFS)

場景

? mac上想將avi格式的視頻轉mp3文件,然后就是百度啊百度啊。

ffmpeg

? FFmpeg是一套可以用來記錄、轉換數(shù)字音頻、視頻,并能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多code都是從頭開發(fā)的。

? 接著安裝,因為mac中已經(jīng)有brew了,所以呢,直接brew installffmpeg,然后就是complete;

ffmpeg的簡單使用

音頻轉換:

1.轉換amr到mp3:

ffmpeg -i shenhuxi.amr amr2mp3.mp3

2.轉換amr到wav:

ffmpeg -acodec libamr_nb -i shenhuxi.amr amr2wav.wav

3.轉換mp3到wav:

ffmpeg -i DING.mp3 -f wav test.wav

4.轉換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  此方法驗證通過 
文章來自http://blog.csdn.net/tylz04/article/details/9041739
測試程序下載:http://files.cnblogs.com/xiaofengfeng/WavConvertAmr.zip 已測試過將WAV轉AMR格式。
下載地址http://ftp.pconline.com.cn/d56bb83a0a66440d54ef5473f548e4b9/pub/download/201010/ffmpeg-20131021.zip

5.轉換wav到mp3:

ffmpeg -i test.wav -f mp3 -acodec libmp3lame -y wav2mp3.mp3

實踐

? 難道你要一個程序員command+c/v,然后就想到了shell腳本,吭哧吭哧的開車。

shell腳本實踐

1、寫好自己的 腳本,比如aa.sh

2、打開終端 執(zhí)行,方法一: 輸入命令 ./aa.sh ,

方法二:直接把 aa.sh 拖入到終端里面。

注意事項:

如果 沒有成功報出問題::

Permission denied。就是沒有權限。

解決辦法:

修改該文件aa.sh 的權限 :使用命令:

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

補充一下

if...fi 語句的基本控制語句,它允許Shell有條件作出決定并執(zhí)行語句。

語法

if [ expression ]
then
   Statement(s) to be executed if expression is true
fi

Shell expression求值。如果結果值是true,給定statement被執(zhí)行。如果 expression 為false ,則沒有語句將不會被執(zhí)行。大部分的時候,會使用比較操作符決策。

關注對括號和表達之間的空間。這個空間是強制性的,否則語法錯誤。

如果expression 是一個shell命令,那么它會被假定如此,如果它執(zhí)行后返回0。如果它是一個布爾表達式,那么返回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

語法

for var in word1 word2 ... wordN
do
   Statement(s) to be executed for every word.
done

var是一個變量,word1 到 wordN 是由空格分隔的字符(字)序列的名稱。每次for 循環(huán)的執(zhí)行,變量var的值被設置為下一個單詞的列表中的字,word1 到 wordN 。

例子:

下面是一個簡單的例子,它使用for循環(huán)跨越通過給定的數(shù)字列表:

#!/bin/sh

for var in 0 1 2 3 4 5 6 7 8 9
do
   echo $var
done

這將產(chǎn)生以下結果:

0
1
2
3
4
5
6
7
8
9
  • 注意:一開始沒有加IFS=$'\n'的時候,遍歷文件名帶空格的時候,會將空格符單做分隔符,然后拆成多個文件。
  • 原因:默認情況下'\n'會被當做分隔符進行解析,通過IFS,可以會略掉'\n',這就是問題的原因嘍。
參考

http://blog.csdn.net/whuslei/article/details/7187639

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容