美文网首页
哔哩哔哩视频下载后的批量合并的 shell 脚本

哔哩哔哩视频下载后的批量合并的 shell 脚本

作者: theViru | 来源:发表于2020-05-16 19:58 被阅读0次

    本人运行改脚本的环境与软件

    环境: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 下文件名允许有空格,改脚本不允许路径有空格。

    相关文章

      网友评论

          本文标题:哔哩哔哩视频下载后的批量合并的 shell 脚本

          本文链接:https://www.haomeiwen.com/subject/vfwrohtx.html