python使用ffmpeg去掉视频片头和片尾

python使用ffmpeg去掉视频片头和片尾,第1张

python使用ffmpeg去掉视频片头和片尾

需要自己得到视频的片头和片尾时长;并且设置好视频文件的名称。
关于ffmpeg的配置及 *** 作可看ffmpeg配置环境和测试,ffmpeg的基本使用,python *** 作ffmpeg

import os
import time
import subprocess

# 按创建文件的时间顺序重命名文件,文件夹内文件要有.后缀
def renameFiles(dirPath):
    list = []
    # 获得文件名列表
    files = os.listdir(dirPath)
    # 获得名称带时间戳的新文件名列表
    for filename in files:
        # 获得文件的最后修改时间
        # createTime = os.path.getmtime(dirPath + filename)
        # 获得文件创建时间
        createTime = os.path.getctime(dirPath + filename)
        # 将最后修改时间戳作为文件名的前缀,得到新的文件名,加入列表
        list.append(str(int(createTime)) + '-' + filename)
    # 重新给列表排序,这次所有文件按创建时间排序了
    list = sorted(list)
    # 遍历创建时间戳为序号
    for i in range(len(list)):
        # 获得原先的文件名
        # print(list[i]) # 1614387291-01.jpg
        oldName = list[i].split('-')[1]
        # 获取文件后缀
        suffix = list[i].split('.')[1]
        newName = '0' + str(i + 1) + '.' +  suffix
        print(oldName,'-->',newName)
        # 重命名文件
        os.rename(dirPath + oldName, dirPath + newName)

# 获取视频时长
def get_video_duration(video_path: str):
    ext = os.path.splitext(video_path)[-1]
    if ext != '.mp4' and ext != '.avi' and ext != '.flv':
        raise Exception('format not support')
    ffprobe_cmd = 'ffprobe -i {} -show_entries format=duration -v quiet -of csv="p=0"'
    p = subprocess.Popen(
        ffprobe_cmd.format(video_path),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        shell=True)
    out, err = p.communicate()
    duration_info = float(str(out, 'utf-8').strip())
    return int(duration_info)

# 删除文件
def delete_av(path):
    if os.path.exists(path):
      os.remove(path)
      print('yes')
    else:
      print("The file does not exist")

# 将视频切割
def video_cut(i,ss,t):
    cmd = "ffmpeg -ss " + f'{ss}' + " -t " + f'{t}' + " -accurate_seek -i F:\大明王朝1566\0" + \
          f'{i}' + ".mp4 -codec copy -avoid_negative_ts 1 F:\大明王朝1566\" + f'{i}' + ".mp4"
    re = os.system(cmd)
    time.sleep(1)
    if re == 0:
        print('成功')
    else:
        print('失败!!!!!!!!!!!!!!!!!!')

# 将mp4转换为ts文件,可不用
def mp4_ts(i):
    cmd = "ffmpeg -i C:\video\" + f'{i}' + ".mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb C:\video\" + f'{i}' + ".ts"
    re = os.system(cmd)
    time.sleep(1)
    if re == 0:
        print('转换成功')
    else:
        print('转换失败!!!!!!!!!!!!!!!!!!')

# mp4或ts文件合并为一个mp4文件
def mp4():
    cmd = "ffmpeg -f concat -i F:\大明王朝1566\list.txt -c copy C:\video\output.mp4"
    re = os.system(cmd)
    time.sleep(1)
    if re == 0:
        print('合并成功')
    else:
        print('合并失败!!!!!!!!!!!!!!!!!!')

if __name__ == '__main__':
    # renameFiles("H:\图片\wpcache\srvsetwp\")
    for index in range(1,47):
        path = 'F:\大明王朝1566\0'+ f'{index}' +'.mp4'
        # t = get_video_duration(path) - (片头时长+片尾)+ 2
        t = get_video_duration(path) - 308 # 减去片头和片尾 + 2s
        # 参数:视频文件名,开始剪切时间(s),剪切的时间长度
        video_cut(index,90,t)
        # delete_av('F:\大明王朝1566\0'+ f'{index}' +'.mp4')
        print('over')
        time.sleep(2)
        
    # mp4()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存