1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import os
- import time
- from tqdm import tqdm
- from .frame_extract import frame_extractor
- from .common import filter_json_files, cut_timestamp, convert_timestamp, get_video_duration
- from .read_folder import read_images_in_order
- from modules.video_processing.image_qa import image_caption
- from modules.video_processing.image_qa_doubao import image_caption_doubao, image_compare_doubao
- from modules.video_processing.video_cut import moviepy_cut
- from .logger_config import setup_logger
- logger = setup_logger(__name__)
- # 1、抽帧保存
- # 2、帧理解
- # 3、LLM判断
- def cut_once(video_path):
- # 0、任务计时
- start = time.time()
- # 1、抽帧保存:每隔60秒抽一帧
- frame_extractor(video_path, interval_sec=60)
- # 2、视频帧理解
- images = read_images_in_order("./data/key_frame/")
- image_caption_doubao(images)
- # 3、视频帧对比:寻找视频裁切时间戳
- filter_images = filter_json_files("./data/img_caption/")
- image_compare_doubao(filter_images)
- # 4、寻找视频裁切时间戳
- timestamp = cut_timestamp("./data/img_caption/for_cut/")
- # 5、长视频裁切
- clips = []
- video_duration = get_video_duration(video_path)
- timestamp_converted = convert_timestamp(timestamp, video_duration)
- clip_name = os.path.splitext(os.path.basename(video_path))[0]
- for i, cut_time in tqdm(enumerate(timestamp_converted)):
- clip_path = "./data/sub_video/" + clip_name + f"{chr(97+i)}.mp4"
- moviepy_cut(video_path, clip_path, cut_time[0], cut_time[1])
- clips.append(clip_path)
- # return clips
- # 6、短视频裁切
- logger.info(f"first_cut: 耗时 - {time.time() - start} sec!")
- return timestamp, clips
- if __name__ == "__main__":
-
- a = cut_once("data/raw_video/rawvideo.flv")
- print(a)
- # image_list = ["/data/data/luosy/project/oral/data/key_frame/frame_00000000.jpg", "/data/data/luosy/project/oral/data/key_frame/frame_00003000.jpg"]
- # image_compare_doubao(image_list)
- # TODO:parallel_fast_extractor自适应地决定抽帧次数,直至间隔1分钟抽取。
|