哔哩哔哩视频下载后的批量合并的 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 下文件名允许有空格,改脚本不允许路径有空格。

上一篇下一篇

猜你喜欢

热点阅读