Python3 视频剪辑代码:自定义剪辑文件名并支持多次剪辑

本代码使用 Python3 和 ffmpeg 库实现视频剪辑功能,并允许用户自定义剪辑后的文件名,支持多次剪辑同一视频。代码提供详细注释,易于理解和修改。

import os
import subprocess

# 定义输入输出文件路径
input_path = ''
output_path = ''

# 支持的视频格式
supported_formats = ['.mp4', '.mkv', '.wmv', '.avi', '.rmvb', '.rm', '.flv', '.mov',
                     '.ts', '.m2ts', '.mpeg', '.asf', '.asx', '.vob' , '.m2t', '.3gp']

# 获取视频列表
def get_video_list(path):
    video_list = []
    if os.path.isfile(path) and os.path.splitext(path)[1] in supported_formats:
        video_list.append(path)
    elif os.path.isdir(path):
        for file_name in os.listdir(path):
            if os.path.splitext(file_name)[1] in supported_formats:
                video_list.append(os.path.join(path, file_name))
    return video_list

# 按照最后修改时间排序
def sort_video_list(video_list):
    video_list.sort(key=lambda x: os.path.getmtime(x), reverse=True)
    return video_list

# 剪辑视频
def clip_video(video_path, start_time='00:00:00.000', end_time=None, clip_index=0):
    video_name = os.path.basename(video_path)
    output_name = 'clip_{}_{}'.format(clip_index, video_name)
    output_path = os.path.join(os.path.dirname(video_path), output_name)
    if not start_time:
        start_time = '00:00:00.000'
    if end_time is None:
        cmd = 'ffmpeg -ss ' + ''' + start_time + ''' + ' -i ' + ''' + video_path + ''' + ' -c copy ' + ''' + output_path + '''
    else:
        cmd = 'ffmpeg -ss ' + ''' + start_time + ''' + ' -to ' + ''' + end_time + ''' + ' -i ' + ''' + video_path + ''' + ' -c copy ' + ''' + output_path + '''
    with open(os.devnull, 'w') as devnull:
        subprocess.Popen(cmd, shell=True, stdout=devnull, stderr=subprocess.PIPE)


if __name__ == '__main__':
    # 输入视频路径
    input_path = input('请输入视频路径:')

    # 获取视频列表并排序
    video_list = get_video_list(input_path)
    if not video_list:
        print('输入的路径不是一个视频文件或者包含视频文件的目录!')
    else:
        video_list = sort_video_list(video_list)

        # 显示视频列表
        for i, video_name in enumerate(video_list):
            print('{}: {}'.format(i+1, os.path.basename(video_name)))

        # 选择要剪辑的视频
        selected_video_index = int(input('请选择要剪辑的视频序号:'))

        # 开始和结束时间
        start_time = input('请输入开始时间(格式为hh:mm:ss.sss):')
        end_time = input('请输入结束时间(格式为hh:mm:ss.sss):')
        if not end_time:
            end_time = None

        # 剪辑视频
        selected_video_path = video_list[selected_video_index-1]
        if not start_time:
            clip_video(selected_video_path, None, end_time, 0)
        else:
            clip_video(selected_video_path, start_time, end_time, 0)

        # 继续剪辑
        clip_index = 1
        while True:
            continue_clip = input('是否继续剪辑?(Y/N)')
            if continue_clip.upper() == 'Y':
                start_time = input('请输入开始时间(格式为hh:mm:ss.sss):')
                end_time = input('请输入结束时间(格式为hh:mm:ss.sss):')
                if not end_time:
                    end_time = None
                if not start_time:
                    clip_video(selected_video_path, None, end_time, clip_index)
                else:
                    clip_video(selected_video_path, start_time, end_time, clip_index)
                clip_index += 1
            elif continue_clip.upper() == 'N':
                break
            else:
                print('输入有误,请重新输入!')

代码功能说明:

  1. 获取视频列表:get_video_list() 函数从指定路径获取所有支持格式的视频文件,并返回一个列表。
  2. 排序视频列表:sort_video_list() 函数将视频列表按照最后修改时间进行排序,并返回排序后的列表。
  3. 剪辑视频:clip_video() 函数使用 ffmpeg 命令剪辑视频,并根据剪辑次数自动生成剪辑后的文件名。
  4. 主程序:
    • 首先获取用户输入的视频路径。
    • 获取视频列表并排序。
    • 显示视频列表,并让用户选择要剪辑的视频。
    • 获取用户输入的开始时间和结束时间。
    • 调用 clip_video() 函数剪辑视频。
    • 询问用户是否继续剪辑,如果用户选择继续剪辑,则重复步骤 4-6,并自动递增剪辑后的文件名序号。

使用说明:

  1. 确保系统已安装 ffmpeg。
  2. 将代码保存为 .py 文件,例如 clip_video.py
  3. 运行代码,输入视频路径,选择要剪辑的视频,并根据提示输入开始时间和结束时间。
  4. 代码会自动生成剪辑后的视频文件,并将其保存在原视频目录下。

注意事项:

  1. 代码中 supported_formats 列表包含了支持的视频格式,可以根据需要添加或删除格式。
  2. 如果需要剪辑多个视频,可以修改代码,实现循环剪辑多个视频的功能。
  3. 代码中 clip_video() 函数使用了 subprocess.Popen() 命令执行 ffmpeg 命令,如果系统无法找到 ffmpeg 命令,需要修改代码中的 ffmpeg 命令路径。

其他改进:

  1. 可以使用图形界面进行操作,方便用户使用。
  2. 可以添加进度条显示剪辑进度。
  3. 可以添加错误处理机制,处理剪辑过程中出现的错误。
  4. 可以添加批量剪辑功能,一次性剪辑多个视频。

希望这篇文章对您有所帮助!如果您有任何问题,请随时在评论区留言。

Python3 视频剪辑代码:自定义剪辑文件名并支持多次剪辑

原文地址: https://www.cveoy.top/t/topic/nzE9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录