Python3 视频剪辑代码优化:单个视频直接输入时间

本文提供一个优化后的 Python3 视频剪辑代码,实现单个视频剪辑时无需选择视频序号,直接输入开始时间和结束时间即可进行剪辑。

优化后的代码如下:

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, index=0):
    video_name = os.path.basename(video_path)
    output_path = os.path.join(os.path.dirname(video_path), f'clip_{index}_{video_name}')
    if end_time is None:
        cmd = 'ffmpeg -ss '{}' -i '{}' -c copy '{}''.format(start_time, video_path, output_path)
    else:
        cmd = 'ffmpeg -ss '{}' -to '{}' -i '{}' -c copy '{}''.format(start_time, end_time, video_path, 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]
        clip_video(selected_video_path, start_time, end_time, selected_video_index)

代码说明:

  1. 支持的视频格式supported_formats 变量定义了代码支持的视频格式,用户可以根据需要进行修改。
  2. 获取视频列表get_video_list 函数用于获取指定路径下的所有视频文件,支持单个视频文件和包含视频文件的目录。
  3. 排序视频列表sort_video_list 函数用于将视频列表按照最后修改时间排序,方便用户选择。
  4. 剪辑视频clip_video 函数用于执行视频剪辑操作,使用 ffmpeg 命令实现。

使用步骤:

  1. 将代码保存为 .py 文件。
  2. 运行代码,输入视频路径。
  3. 选择要剪辑的视频序号。
  4. 输入开始时间和结束时间(格式为 hh:mm:ss.sss)。

注意:

  • 确保系统已安装 ffmpeg 工具。
  • 输入时间格式必须符合 hh:mm:ss.sss 的格式。
  • 剪辑后的视频文件将保存在原视频文件目录下,文件名为 clip_{序号}_{原文件名}

该代码优化后更方便用户操作,使用户无需记忆复杂的命令,只需输入简单的时间信息即可完成视频剪辑。

Python3 视频剪辑代码优化:单个视频直接输入时间

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

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