first_cut.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import os
  2. import time
  3. from tqdm import tqdm
  4. from .frame_extract import frame_extractor
  5. from .common import filter_json_files, cut_timestamp, convert_timestamp, get_video_duration
  6. from .read_folder import read_images_in_order
  7. from modules.video_processing.image_qa import image_caption
  8. from modules.video_processing.image_qa_doubao import image_caption_doubao, image_compare_doubao
  9. from modules.video_processing.video_cut import moviepy_cut
  10. from .logger_config import setup_logger
  11. logger = setup_logger(__name__)
  12. # 1、抽帧保存
  13. # 2、帧理解
  14. # 3、LLM判断
  15. def cut_once(video_path):
  16. # 0、任务计时
  17. start = time.time()
  18. # 1、抽帧保存:每隔60秒抽一帧
  19. frame_extractor(video_path, interval_sec=60)
  20. # 2、视频帧理解
  21. images = read_images_in_order("./data/key_frame/")
  22. image_caption_doubao(images)
  23. # 3、视频帧对比:寻找视频裁切时间戳
  24. filter_images = filter_json_files("./data/img_caption/")
  25. image_compare_doubao(filter_images)
  26. # 4、寻找视频裁切时间戳
  27. timestamp = cut_timestamp("./data/img_caption/for_cut/")
  28. # 5、长视频裁切
  29. clips = []
  30. video_duration = get_video_duration(video_path)
  31. timestamp_converted = convert_timestamp(timestamp, video_duration)
  32. clip_name = os.path.splitext(os.path.basename(video_path))[0]
  33. for i, cut_time in tqdm(enumerate(timestamp_converted)):
  34. clip_path = "./data/sub_video/" + clip_name + f"{chr(97+i)}.mp4"
  35. moviepy_cut(video_path, clip_path, cut_time[0], cut_time[1])
  36. clips.append(clip_path)
  37. # return clips
  38. # 6、短视频裁切
  39. logger.info(f"first_cut: 耗时 - {time.time() - start} sec!")
  40. return timestamp, clips
  41. if __name__ == "__main__":
  42. a = cut_once("data/raw_video/rawvideo.flv")
  43. print(a)
  44. # image_list = ["/data/data/luosy/project/oral/data/key_frame/frame_00000000.jpg", "/data/data/luosy/project/oral/data/key_frame/frame_00003000.jpg"]
  45. # image_compare_doubao(image_list)
  46. # TODO:parallel_fast_extractor自适应地决定抽帧次数,直至间隔1分钟抽取。