import argparse
from moviepy.editor import VideoFileClip
def crop_video_time(input_path, output_path, start_time, end_time):
"""
指定された時間範囲で動画をクロップする関数
Parameters:
-----------
input_path : str
入力動画のパス
output_path : str
出力動画のパス
start_time : float
開始時間(秒)
end_time : float
終了時間(秒)
"""
try:
# 動画を読み込む
video = VideoFileClip(input_path)
# 動画の長さをチェック
if end_time > video.duration:
print(
f"警告: 指定された終了時間({end_time}秒)が動画の長さ({video.duration}秒)を超えています"
)
end_time = video.duration
if start_time < 0:
print("警告: 開始時間は0秒以上である必要があります")
start_time = 0
if start_time >= end_time:
raise ValueError("開始時間は終了時間より小さい必要があります")
# 指定された時間範囲で動画をクロップ
cropped_video = video.subclip(start_time, end_time)
# 動画を保存
cropped_video.write_videofile(output_path, codec="libx264", audio_codec="aac")
# リソースを解放
video.close()
cropped_video.close()
print(f"動画のクロップが完了しました: {output_path}")
except Exception as e:
print(f"エラーが発生しました: {str(e)}")
raise
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="動画の時間的クロップを行うスクリプト")
parser.add_argument("input_path", help="入力動画のパス")
parser.add_argument("output_path", help="出力動画のパス")
parser.add_argument("start_time", type=float, help="開始時間(秒)")
parser.add_argument("end_time", type=float, help="終了時間(秒)")
args = parser.parse_args()
crop_video_time(args.input_path, args.output_path, args.start_time, args.end_time)