我正在尝试将视频分割成每个 1000 帧的块(必须在帧级别完成)。我目前正在使用opencv库,但是它很慢。将 1 小时的视频分割成这些大小相等的块需要半个小时。
这是我目前正在使用的功能:
def split_video(video_path, output_dir, frames_per_chunk=1000):
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = 0
chunk_count = 0
frames = []
# Create output directory if it doesn't exist
if not os.path.exists(output_dir):
os.makedirs(output_dir)
frame_idx = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frames.append(frame)
frame_count += 1
# Save chunk after every 'frames_per_chunk' frames
if frame_count % frames_per_chunk == 0:
chunk_filename = f'video_chunk_{chunk_count}.mp4'
chunk_path = os.path.join(output_dir, chunk_filename)
save_frames_to_video(frames, chunk_path, fps)
frames = []
chunk_count += 1
frame_idx +=1
# Save any remaining frames
if frames:
chunk_filename = f'video_chunk_{chunk_count}.mp4'
chunk_path = os.path.join(output_dir, chunk_filename)
save_frames_to_video(frames, chunk_path, fps)
print(f'video split into {chunk_count + 1} chunks')
cap.release()
return
Python 中还有其他更有效的方法或库吗?我已经研究过 ffmpeg 库,但这似乎只能很好地处理按持续时间而不是按数字帧分割。
你可以使用 ffmpeg 来做到这一点。
ffmpeg -i input.mp4 -c 复制 -map 0 -f 段 -segment_frames 1000,2000,3000,4000,5000 输出_%03d.mp4
此命令将按帧号 1000、2000、3000、4000、4000、5000 等对视频进行分段。
请记住视频的 FPS 和 GOP。