事情是這樣的,我有個和社畜的社會地位不太相符的小愛好——聽音樂劇。
基本上是在B站上點開視訊聽,不是不想在網易雲或者QQ音樂聽,只是在這些音樂軟體上面,我想聽的片段要不就收費,要不版本不是我喜歡的,要不乾脆就找不到。
而且,一部音樂劇裡面,總是有些片段我很喜歡,但是有些片段則沒多大興趣,如果在B站上面聽,則總要聽一遍這些不感興趣的地方,這效率就很低了。
那麼幹脆就搞一個小工具吧!就放伺服器上面,直接用介面去呼叫,然後把處理好的音訊檔案返回回來,這樣也不用在本地下載整個視訊然後自己手動切了,快捷又優雅~
作為面向百度/github開發的資深開發者,這點需求是難不倒我的,很快找到了一個簡單好用的B站視訊下載工具,地址在這兒:https://github.com/nilaoda/BBDown(感謝BBDown這個庫的開發者大佬,造福百姓功德無量)
然後寫個小指令碼,來呼叫這個BBDown的工具進行視訊下載:
#! /bin/sh
#使用方法
#./bilicut.sh bv號 開始時間 結束時間 輸出檔名 分P選項(可選)
#例如:
#./bilicut.sh BV1uz4y1S7oG 00:00:20 00:00:30 悲慘世界0301 3
# 引數說明
# 1: bv號
# 2: 開始時間
# 3: 結束時間
# 4: 輸出檔名
# 5:分P索引
#環境要求說明:
#此指令碼使用BBDown下載工具,需要將指令碼與BBDown執行檔案放在同一目錄下
#BBDown傳送門:https://github.com/nilaoda/BBDown
#需要提前安裝好FFmpeg環境,詳見 https://blog.csdn.net/weixin_36155936/article/details/116988522
#僅音訊選項 --audio-only
if [ ! -d "/root/download" ]; then
mkdir /root/download
fi
if [ ! -d "/root/output" ]; then
mkdir /root/output
fi
biliUrl="https://www.bilibili.com/video/"
downloadFlag=0
echo "正在下載..."
if [ $5 > 0 ] ; then
path=/root/download/${1}/P${5}
echo "分P選擇:P${5}"
#判斷是否已經有快取檔案
if [ ! -d "/root/download/${1}" ]; then
mkdir /root/download/$1
fi
if [ ! -d "/root/download/${1}/P${5}" ]; then
mkdir /root/download/$1/P$5
results=`./BBDown ${biliUrl}${1} -p ${5} --work-dir /root/download/${1}/P${5} --audio-only`
downloadFlag=1
fi
else
path=/root/download/${4}
#echo "不存在分P選項"
#判斷是否已經有快取檔案
if [ ! -d "/root/download/${1}" ]; then
mkdir /root/download/$1
results=`./BBDown ${1} --work-dir /root/download/${4} --audio-only`
downloadFlag=1
fi
fi
if [ $downloadFlag -eq 0 ] ; then
echo "使用快取檔案"
else
echo "下載完成"
fi
files=$(ls $path)
echo "檔案標題為 ${files}"
echo "切片時間區間 ${2} - ${3}"
echo "開始處理......"
ffmpeg -ss $2 -i "${path}/${files}" -c copy -t $3 "/root/output/${4}.mp4" -loglevel quiet
ffmpeg -i "/root/output/${4}.mp4" -vn -codec copy "/root/output/${4}".m4a -loglevel quiet
echo "處理完成 輸出檔案 /root/output/${4}.m4a"
(已上傳至GitHub,有Windows版可以使用:https://github.com/heng4719/BBCut)
同時在指令碼的最後,也可以看到用ffmpeg去對這個視訊進行了一個剪輯和格式轉換的處理,最終把音訊檔案輸出到 /root/output/目錄下。
到這裡,實際上主要功能就已經完成了,呼叫這個指令碼傳入指定的視訊bv號和其他引數,就可以完美實現需求了。
但是不夠優雅!
難道我每次想切視訊,都還得連到伺服器上面去手動寫命令?
Not elegant!
所以就寫了個前端頁面來呼叫:
至此,就可以隨時隨地的下載想要的視訊音樂片段啦,優雅~