macOS 命令行播放音乐

不太习惯 macOS 上的音乐播放器,所以手工写了个脚本程序播放音乐文件。

脚本运行起来是这样的: 

第一列显示音乐文件序号,第二例是音乐时长,第三例是播放时间,两列都按小时:分钟:秒显示,第四列是音乐文件名称。

音乐播放采用 ffmpeg,所以要先下载安装 ffmpeg 包。

脚本完整内容如下:

#!/bin/zsh

##### Routines ########

function hide_cursor {
    echo -n -e "\033[?25l"
}

function display_cursor {
    echo -n -e "\033[?25h"
}

function clear_banner {
    echo
}

function display_banner {
    local prefix=$1
    local dt=$2
    local count=100
    local st=$(date +%s)
    local delta="1"
    while [ $delta -le $dt ]
    do
        banner=$(printf $prefix $(s2hms $delta))
        echo -n -e "$banner"
        sleep 1
        count=${#banner}
        echo -n -e "\r"
        now=$(date +%s)
        delta=$((now - st))
    done
}


function hms2s {
    local t=$1
    local h=0
    local m=0
    local s=0
    t=$(echo $t | awk -F '.' '{print $1}')
    h=$(echo $t | awk -F ':' '{print $1}')
    m=$(echo $t | awk -F ':' '{print $2}')
    s=$(echo $t | awk -F ':' '{print $3}')
    t=$((h*3600 + m*60 + s))
    echo $t
}

function s2hms {
    local t=$1
    local h=$((t/3600))
    local m=$(((t - h*3600)/60))
    local s=$((t - h*3600 - m*60))
    printf "%02d:%02d:%02d" $h $m $s
}

function playmusic {
    local count=1
    local num="${#@}"
    local song=( )

    while [ $count -le $num ]
    do
        song[$count]=$1
        shift
        let count+=1
    done

    count=1
    while [ $count -le $num ]
    do
        file="${song[$count]}"
        etime=$(ffprobe $file 2>&1 |grep Duration|awk -F ',' '{print $1}' | awk '{print $2}')
        ffplay -autoexit -nodisp -ss 0 -t $etime -i $file > /dev/null 2>&1 &
        hide_cursor
        cstr=$(printf "\033[35m[ %03d ]\033[0m \033[36m%08s\033[0m \033[37m%%08s\033[0m %-025s" $count $(echo $etime|sed 's/\.[0-9]*//') "$(basename $file)")
        display_banner "$cstr" `hms2s $etime`
        clear_banner
        wait $(jobs -l|awk '{print $3}')
        display_cursor
        let count+=1
        sleep 2
    done
}

##### Main ###########
export LC_TYPE=zh_CN.UTF-8

trap "display_cursor; exit" 2 9 15
playmusic $@

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值