使用ffmpeg提取音頻的命令:
ffmpeg -i input -vn -y -acodec copy output
最開始在命令行中用ls列出文件下的文件, 復(fù)制到sublime, 再使用正則表達(dá)式替換成ffmpeg命令, 一行一行復(fù)制粘貼到命令行中執(zhí)行, 效率太低了, 于是寫了腳本
basePath='D:\\Videos\\'
list=`ls $basePath`
echo $list
for item in ${list[@]}
do
ffmpeg -i "${basePath}${item}" -vn -y -acodec copy "${item%.*}.aac"
done
${item%.*}.aac
用來把MP4替換為aac
運(yùn)行后發(fā)現(xiàn), 部分文件名存在空格, list是以空格為分隔符, 這就尷尬了, 誰家文件名里沒有幾個(gè)空格啊
繼續(xù)改, ls -m
能以逗號(hào)(,)為間隔符, 再添加一行EFS=','
, list的間隔符設(shè)置成為逗號(hào)了, 文件名中包含逗號(hào)的情況比空格的少得多吧
basePath='I:\\Videos\\s思維漫游\\思維漫游\\'
list=`ls -m $basePath` #以逗號(hào)作為分隔符
echo $list
IFS=","
for item in ${list[@]}
do
ffmpeg -i "${basePath}${item}" -vn -y -acodec copy "${item%.*}.aac"
done
運(yùn)行發(fā)現(xiàn)出錯(cuò), 文件名莫名其妙的有換行, 繼續(xù)改, 可能的原因是ls輸出的文件名有制表符之類的符號(hào), 那就把文件名的第一個(gè)字符給刪了唄, 改了過后, 還存在一個(gè)問題, 第一個(gè)文件名前沒有特殊字符, 得排除, 本來想用正則匹配[\r\t\n\ ]第一個(gè)字符, 蕩是老有問題, 還是最簡單粗暴判斷index最有效, 最后的的腳本如下:
basePath='D:\\Videos\\' #沒有考慮子文件夾, 默認(rèn)文件夾下都是視頻
list=`ls -m $basePath` #以逗號(hào)作為分隔符
echo $list
IFS=","
isStart=1
for item in ${list[@]}
do
if [[ isStart -eq 1 ]];then
it=$item
isStart=0
else
it=${item:1} # ls -m 出來的文件名有個(gè)\t, 需要移除首字符
fi
# echo "${basePath}${it}" "${it%.*}.aac"
ffmpeg -i "${basePath}${it}" -vn -y -acodec copy "${it%.*}.aac"
done