win10环境
ffmpeg下载地址
直接在音视频目录运下面的命令
ffmpeg -i video.m4s -i audio.m4s -c:v copy -c:a aac -strict experimental output.mp4
import os
import json
def path(path,name):
"""
:param path: 视屏项目的总目录
:param name: audio.m4s 音频的文件名,每个音频的名字是一样的
:return: (视屏路劲,音频路径,视屏信息的json文件路径)的列表
"""
res=[]
base=os.path.abspath(path)
for root,dirs,files in os.walk(base):
if not dirs:
for file in files:
if name in file:
r=os.path.join(root,file)
res.append((r,r.replace('audio.m4s','video.m4s'),os.path.join(os.path.dirname(os.path.dirname(r)),'entry.json')))
return res
def get_info(file_path):
"""
:param file_path: entry.json文件的路径
:return: 视屏的标题信息
"""
with open(file_path,'rb')as f:
obj=json.load(f)
return obj['page_data']['part']
def has_mp4(file_path):
"""
过滤掉已有.mp4文件的目录
:param file_path: 视屏目录
:return: True or False
"""
return any(['.mp4'in x for x in os.listdir(file_path)])
if __name__ == '__main__':
#test
# test=path("./视屏合集", "audio.m4s")
# print(test)
#先测试一个
file_list=path("./视屏合集", "audio.m4s")
for x in file_list[:1]:
#for x in file_list:
video_name=get_info(x[2])
work_path=os.path.dirname(x[0])
#把已转换的目录过滤掉
if has_mp4(work_path):
continue
print(work_path)
os.system(r'cd %s & ffmpeg -i audio.m4s -i video.m4s -c:v copy -c:a aac -strict experimental %s.mp4'%(work_path,video_name))
[('C:\\Users\\Administrator\\Desktop\\视屏合集\\170\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\170\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\170\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\171\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\171\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\171\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\172\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\172\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\172\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\173\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\173\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\173\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\174\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\174\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\174\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\175\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\175\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\175\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\176\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\176\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\176\\entry.json'), ('C:\\Users\\Administrator\\Desktop\\视屏合集\\177\\64\\audio.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\177\\64\\video.m4s', 'C:\\Users\\Administrator\\Desktop\\视屏合集\\177\\entry.json')]
import os
import json
def path(path,name):
"""
:param path: 视屏项目的总目录
:param name: audio.m4s 音频的文件名,每个音频的名字是一样的
:return: (视屏路劲,音频路径,视屏信息的json文件路径)
"""
res=[]
base=os.path.abspath(path)
for root,dirs,files in os.walk(base):
if not dirs:
for file in files:
if name in file:
r=os.path.join(root,file)
res.append((r,r.replace('audio.m4s','video.m4s'),os.path.join(os.path.dirname(os.path.dirname(r)),'entry.json')))
return res
def get_info(file_path):
"""
:param file_path: entry.json文件的路径
:return: 视屏的标题信息
"""
with open(file_path,'rb')as f:
obj=json.load(f)
return obj['page_data']['part']
def has_mp4(file_path):
"""
过滤掉已有.mp4文件的目录
:param file_path: 视屏目录
:return: True or False
"""
return any(['.mp4'in x for x in os.listdir(file_path)])
if __name__ == '__main__':
#先测试一个
BaseDir=os.path.abspath('./视屏合集')
file_list=path(BaseDir, "audio.m4s")
# for x in file_list[:1]:
for x in file_list[:]:
video_name=get_info(x[2])
work_path=os.path.dirname(x[0])
if has_mp4(work_path):
os.system(r'cd %s & move %s.mp4 %s\%s.mp4'%(work_path,video_name,BaseDir,video_name))