m4s音频视频文件批量合并&重命名为原标题,Python实现

缘由:最近手机保存的公开课、学习视频越来越多,将手机b站视频上传PC后发现,视频是分开在不同目录,并且是音视频分开的.m4s文件,
以郝斌C语言为例,182集几百个目录和文件,手动合并和修改文件名的念头掐灭在萌芽中,遂用Python2写了这个脚本来实现。
代码如下,仅供学习之用:

# coding=gbk
import sys, os, re
reload(sys)
sys.setdefaultencoding( "gbk" )

# 列表转换成字符串输出的时候出现了UnicodeEncodeError: 'ascii' codec can't encode characters in position,加入上面3行解决

def Get_address():
    """获取视频地址列表,根据不同视频自己修改存放地址和集数哦
    """
    # 视频存放地址初始化
    addr1 = u"E:\\公开课\\郝斌C语言\\8074534\\"
    addr_list = []

    # 获取每集视频的地址,并存入列表
    for i in range(1, 183):
        addr2 = addr1 + str(i)
        addr_list.append(addr2)
    return addr_list

def Get_Name():
    """获取每集视频标题,并存入列表"""
    # 名字存放在entry.json文件里,固定的键值对,so用正则按图索骥就好
    pat = """"part":"([\s\S]*)","vid"""
    name_list = []
    
    for i in Get_address():
        add2 = i + "\\entry.json"
        with open(add2, "r") as f:
            text = f.read()
        name = re.findall(pat, text)
        if len(name) != 0:
            name_list.append(name[0])
        else:
            print i, ":未匹配到文件名信息!"
    return name_list

def Merge():
"""准备工作完成,可以用ffmpeg合并音视频了O(∩_∩)O~~
ps:本地要解压ffmpeg并配置好环境变量,未安装的自行搜索哦"""

    # 获取地址、标题两个函数存放列表的顺序一致,因此每集可以一一对应
    for i in xrange(len(Get_address())):
        name = Get_Name()[i]
        audio = Get_address()[i] + r"\32" + r"\audio.m4s"
        video = Get_address()[i] + r"\32" + r"\video.m4s"
        # Python2的编码问题真的难受,字符串拼接IDE、系统dos 各种编码异常问题(╯﹏╰)
        cmand = "ffmpeg -i " + '"' + video + '"' + " -i " + '"' + audio + '"' + " -c:v copy -strict experimental "
        name2 = '"E:/' + name + '.mp4"'
        cmand = cmand.decode("gbk", "ignore") + name2.decode("utf8", "ignore")

        print cmand
        print video, "\n", audio
        
        # 调用--> cmd --> ffmpeg 合并视频
        os.system(cmand)


if __name__ == '__main__':
    Merge()

CPU是RYZEN 1700 @3.5G单线程处理,大概花了28分钟,有批量需求的可以用多线程改进。本次结果如下:

m4s音频视频文件批量合并&重命名为原标题,Python实现_第1张图片

 

你可能感兴趣的:(m4s音频视频文件批量合并&重命名为原标题,Python实现)