事情是這樣的,我有個和社畜的社會地位不太相符的小愛好——聽音樂劇。
基本上是在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!
所以就寫了個前端頁面來調用:
至此,就可以隨時隨地的下載想要的視頻音樂片段啦,優雅~