用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线上播放视频,并且跳转到播放位置,实现画质、帧率、倍速一致的功能。