Python控制视频在线播放的常见问题的解决方案

用python进行视频的在线跳转播放位置中,而网络上大多数的代码及AI提供的代码往往存在问题,在多次调整后仍会产生报错。

例如,使用VideoFileClip库

from moviepy.editor import VideoFileClip

# 加载视频
video = VideoFileClip("path_to_your_video.mp4")

# 指定要跳转到的开始时间(单位通常是秒)
start_time = 60  # 这里假设你想从第60秒开始播放

# 创建一个新的剪辑,只包含指定时间段
trimmed_clip = video.subclip(start_time, None)  # 如果你想直到结束都播放这部分

# 显示或保存剪辑
trimmed_clip.preview()  # 在控制台预览
# trimmed_clip.write_videofile("output.mp4")  # 如果想保存为新的视频文件

则会出现

Array depth must match number of mixer channels

报错

例如,使用OpenCV库

import cv2

def trim_video(input_video_path, output_video_path, start_time, end_time):

    cap = cv2.VideoCapture(input_video_path)

    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    fps = int(cap.get(cv2.CAP_PROP_FPS))


    start_frame = int(fps * start_time)
    end_frame = int(fps * end_time)

    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(output_video_path, fourcc, fps, (640, 480))

    frame_count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            if frame_count >= start_frame and frame_count <= end_frame:
                out.write(frame)
            frame_count += 1
        else:
            break

    cap.release()
    out.release()


trim_video('your_video.mp4', 'output_video.mp4', 0, 100)

则会出现,播放的视频只有画面,没有声音,且播放失真,播放速度不稳定的问题。

并且Windows自带的播放器无法满足要求,如果需要使用则需要将视频下载或存为临时文件

import os
import subprocess
from moviepy.editor import VideoFileClip

# 视频文件路径
video_path = 'your_video.mp4'

# 加载视频
clip = VideoFileClip(video_path)

# 设置重复播放的时间段(开始和结束时间,单位为秒)
start_time = 10  # 从视频的第10秒开始
end_time = 20    # 到视频的第20秒结束
duration = end_time - start_time

# 提取需要重复的时间段
subclip = clip.subclip(start_time, end_time)

# 设置重复次数
repetitions = 3  # 重复3次

# 创建重复播放的视频片段并保存到临时文件
temp_video_path = 'temp_repeated_video.mp4'
repeated_clip = subclip.loop(repetitions)
repeated_clip.write_videofile(temp_video_path, codec='libx264')

# 使用Windows Media Player播放视频
subprocess.run(['start', temp_video_path], shell=True)

# 清理临时文件(可选,如果你想在播放后删除它)
# os.remove(temp_video_path)

但若是视频内容过大,则会占用内存。因此,需要下载额外播放器——ffmpeg 

内容如上

修改播放设置为ffmpeg

代码如下

import subprocess
from openai import OpenAI
import os
import re


numbers_float = [float(num) for num in numbers]
Minority = int(min(numbers_float))


def seconds_to_time_format(seconds):
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = seconds % 60
    return f"{hours:02}:{minutes:02}:{seconds:02}"


formatted_time = seconds_to_time_format(Minority)


def play_video_in_window(video_path, start_time=None):
    command = ['ffplay', '-i', video_path]
    if start_time is not None:
        command.extend(['-ss', str(start_time)])
    subprocess.run(command)


video_path = most_satisfied  # 替换为你的视频文件路径
start_time = formatted_time  # 设置视频开始播放的时间(格式:时:分:秒),如果不需要则可以省略或设置为None
play_video_in_window(video_path, start_time)

其中,numbers_float为播放位置时间节点的列表。如此,方可实现python线上播放视频,并且跳转到播放位置,实现画质、帧率、倍速一致的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值