哔哩哔哩视频下载后的批量合并的 shell 脚本
2020-05-16 本文已影响0人
theViru
本人运行改脚本的环境与软件
环境:Windows10 下的 WSL (ubuntu 18.04 LTS)
软件:ffmpeg (version 4.2)(可用 conda 安装)
ffmpeg 的简单用法
视频与音频合并
ffmpeg -i video.m4s -i audio.m4s -c copy output.mp4
多个视频连接
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4
代码
本脚本暂命名为:merge_rename.sh
#!/bin/bash
# Author: theViru
# Created Time: 2020/05/21
echo "===== start ====="
dirx=`pwd`
mkdir output
for i in `ls -l | grep ^d | awk '{print $9}' | awk '!/output/{print}'`
do
cd $i
mkdir output
diry=`pwd`
for y in `ls -l | grep ^d | awk '{print $9}' | awk '{if($0 ~ /^[0-9]+$/) print $0}'`
do
cd $y
if [ -e entry.json ]; then
name=`awk -F"part\":\"" '{print $2}' entry.json | awk -F"\"" '{print $1}' | tr ' ' '_'`
name=`echo $name | tr '\\\/' '_'`
name=${y}"_"$name
title=`awk -F"title\":\"" '{print $2}' entry.json | awk -F"\"" '{print $1}' | tr ' ' '_'`
else
echo "===== ${i}/${y} is not have file entry.json ====="
name=$y"_not_entry.json"
fi
dirn=`ls -l | grep ^d | awk '{print $9}'`
if [ -z $dirn ]; then
cd ${diry}
continue
else
cd $dirn
filn=`ls *blv | wc -l`
if [ -e 0.blv ] && [ $filn -gt 1 ]; then
numv=`ls *blv | wc -l`
concat="concat:"
for ((var=0; var<${numv}-1; var++))
do
concat=${concat}${var}".blv|"
done
concat=${concat}${var}".blv"
ffmpeg -i $concat -c copy ${diry}/output/${name}.mp4
cd $diry
elif [ -e 0.blv ] && [ $filn -eq 1 ]; then
ffmpeg -i 0.blv -c copy ${diry}/output/${name}.mp4
cd $diry
elif [ -e video.m4s ] && [ -e audio.m4s ]; then
ffmpeg -i video.m4s -i audio.m4s -c copy ${diry}/output/${name}.mp4
cd $diry
else
echo "==== no the file ==="
cd $diry
fi
fi
done
mv output $title
mv $title ${dirx}/output/
echo "===== $title end ====="
cd $dirx
done
echo "===== all is end ====="
使用方法
当前目录中有从哔哩哔哩下载的视频文件夹
Windows File Explorer WSL ls -l
bash merge_rename.sh
该脚本会在当前目录下生成一个名为 output 的文件夹,每个视频系列在该文件夹下有一个相应的子文件夹存储系列视频。
注意:路径必须符合 Linux 命名规则。Windows 下文件名允许有空格,改脚本不允许路径有空格。