B站视频自动合成
未经允许不得转载!
bilibili App 下下来的文件是分离的:纯视频合纯音频,单独每个都是不完整,这里我利用FFmpeg
和shell脚本
来实现自动化合成。
脚本只针对一个目录下多p的情况,多目录多p的情况可以根据脚本自行修改。
备注: 安卓版B站缓存下来的文件位置为/Android/data/tv.danmaku.bili/download/
前置
下载FFmpeg
,去FFmpeg官网下一个,可以是独立程序,也可以是
下载shell模拟器
,我这里用的是git
附带的git-bash
,可以去git官网下载,最好下Portable版。
执行的脚本
#!/bin/bash
echo "Copyright (c) 2020 Yahuan Jin. All rights reserved."
## v3
### * fix 带空格的标题的文件不能合并生成
### * 版增加目录树的排序: | sort -n
### * ffmpeg 静默执行,不打印日志: -loglevel quiet
### * 去除控制台的警告输出: awk: cmd. line:1: warning: regexp escape sequence `\"' is not a known regexp operator
## v2
### * 版自动遍历目录树(支持多p自动遍历)
## ffmpeg 的根目录
FFMPEG_DIR="/D/jyh.program.portable/Captura/Captura-Portable/Codecs"
## ffmpeg 主程序路径
FFMPEG_PATH="${FFMPEG_DIR}/ffmpeg"
## 存放b站缓存的文件的根目录
SOURCE_DIR="/F/bilibili/202060761"
## 合并b站缓存的文件的目标目录
TARGET_DIR="/F/bilibili/target"
## ffmpeg 的目标文件夹不能自动创建,需要手动创建
if [ ! -d $TARGET_DIR ]; then
mkdir -p ${TARGET_DIR}
fi
echo "starting..."
## 遍历目录树
for i in `ls -l ${SOURCE_DIR} | awk '{print $9}' | sort -n`;
do
source_base_path="${SOURCE_DIR}/${i}"
video_path="${source_base_path}/64/video.m4s"
audio_path="${source_base_path}/64/audio.m4s"
entry_json_path="${source_base_path}/entry.json"
## 拿出标题
# target_name=`cat ${entry_json_path} | awk -F '"title":' 'match($2,/\"([^\"]*)\"/,a){print a[1]}'`
## 拿出实际标题
target_name=`cat ${entry_json_path} | awk -F '"page_data":' 'match($2,/"part":"([^"]*)"/,a){print a[1]}'`
## 标题中的所有空格替换为'_'(shell 中带空格会被当成参数分割符)
target_name_final=$(echo ${target_name} | awk '{gsub(/ /,"_")}1')
#echo "target_name= "${target_name}
#echo "target_name_final="${target_name_final}
target_path="${TARGET_DIR}/${target_name_final}.mp4"
#echo "target_path="${target_path}
command="${FFMPEG_PATH} -i ${video_path} -i ${audio_path} -codec copy ${target_path} -loglevel quiet"
#echo "${command}"
#echo "${target_path}"
$(${command})
echo "finish ==> "${target_path}
done
echo "ending..."
执行脚本
- 打开
git-bash
- 然后执行脚本
# 脚本的路径和名字根据实际情况自己修改 sh /f/bilibili/bilibili_merge_v3.sh