[5sec segmentation]
import subprocess
import os
from math import ceil
def split_video_ffmpeg(input_file, output_dir, segment_duration=5):
# Create output directory if it doesn't exist
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# Get video duration using ffprobe
duration_cmd = [
'ffprobe',
'-v', 'error',
'-show_entries', 'format=duration',
'-of', 'default=noprint_wrappers=1:nokey=1',
input_file
]
duration = float(subprocess.check_output(duration_cmd).decode('utf-8').strip())
total_segments = ceil(duration / segment_duration)
# Split video into segments using ffmpeg
for i in range(total_segments):
start_time = i * segment_duration
output_filename = f"segment_{int(start_time):04d}_{int(min((i+1)*segment_duration, duration)):04d}.mp4"
output_path = os.path.join(output_dir, output_filename)
ffmpeg_cmd = [
'ffmpeg',
'-i', input_file,
'-ss', str(start_time),
'-t', str(segment_duration),
'-c', 'copy', # Copy codec without re-encoding
'-avoid_negative_ts', '1',
output_path
]
subprocess.run(ffmpeg_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Example usage
input_video = "wed.mp4"
output_directory = "output_segments"
split_video_ffmpeg(input_video, output_directory, 5)
[resize, rotate with sound]
import cv2
import numpy as np
from moviepy.editor import VideoFileClip, AudioFileClip
import os
def rotate_resize_with_audio(input_file, output_file, width=1344, height=2368):
# 임시 파일명 생성
temp_video = "temp_video.mp4"
# 비디오 캡처 객체 생성
cap = cv2.VideoCapture(input_file)
fps = int(cap.get(cv2.CAP_PROP_FPS))
# 비디오 작성자 객체 생성
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(temp_video, fourcc, fps, (width, height))
try:
# 비디오 프레임 처리
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 프레임 90도 회전
rotated_frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
# 프레임 크기 조정
resized_frame = cv2.resize(rotated_frame, (width, height))
# 조정된 프레임 저장
out.write(resized_frame)
# 리소스 해제
cap.release()
out.release()
cv2.destroyAllWindows()
# 원본 비디오에서 오디오 추출
video_clip = VideoFileClip(input_file)
audio_clip = video_clip.audio
# 처리된 비디오에 오디오 추가
processed_video = VideoFileClip(temp_video)
final_video = processed_video.set_audio(audio_clip)
# 최종 비디오 저장
final_video.write_videofile(output_file)
finally:
# 임시 파일 삭제 및 리소스 정리
video_clip.close()
processed_video.close()
if os.path.exists(temp_video):
os.remove(temp_video)
# 사용 예시
input_file = "input_video.mp4"
output_file = "final_video.mp4"
rotate_resize_with_audio(input_file, output_file)
[merge.py]
from moviepy.editor import VideoFileClip, concatenate_videoclips
def merge_mp4_files(input_files, output_file):
# 비디오 클립 리스트 생성
video_clips = []
try:
# 각 입력 파일을 VideoFileClip으로 변환
for file in input_files:
clip = VideoFileClip(file)
video_clips.append(clip)
# 모든 클립 연결
final_clip = concatenate_videoclips(video_clips)
# 결과 파일 저장
final_clip.write_videofile(output_file)
finally:
# 모든 클립 닫기
for clip in video_clips:
clip.close()
# 사용 예시
input_files = [
"video0.mp4",
"video1.mp4",
"video2.mp4",
"video3.mp4",
"video4.mp4"
]
output_file = "wed.mp4"
merge_mp4_files(input_files, output_file)
댓글 달기