【问题标题】:Frame extraction for multiple videos in file directory文件目录中多个视频的帧提取
【发布时间】:2021-08-31 12:08:28
【问题描述】:

虽然存在多种从视频中提取帧的方法,但我想创建一个loop 用于对目录中存在的多个视频进行帧提取。

要包含的一个主要关键功能是以串行方式(即 1-60 然后 61-120 及更多)对帧进行编号。 一种方法是一次提取一个视频并重复所有视频,但这很长。

尝试过的代码:(从某个地方得到它并尝试根据我的目录进行更改)

i = 1  # Counter of first video
input_filenames='Dataset/videos'

for input_filename in intput_filenames:
    cap = cv2.VideoCapture(input_filename)

   
    while True:
        ret, frame = cap.read()  # Read frame from first video

        if ret:
            cv2.imwrite(str(i) + '.jpg', frame)  
            cv2.imshow('frame', frame)  # Displaying frame for testing
            i += 1 # Advance file counter
        else:
            break # Break the interal loop when res status is False.

        cv2.waitKey(100) #Wait 100msec 

    cap.release() 

【问题讨论】:

    标签: python numpy opencv jupyter-notebook operating-system


    【解决方案1】:

    经过大量的搜索和尝试,终于达到了迭代目录下的视频文件,连续提取帧的目的。

    代码:

    def frames_multiple_videos(filenames):
        i = 1  # Counter of first video
    
        for j in filenames:
            cap = cv2.VideoCapture(j)
    
            while True:
                ret, frame = cap.read()  # Read frame from first video
            
                if ret!=True:
                    cv2.imwrite(filenames +'frame' + str(i) + '.jpg', frame)  # Write frame to JPEG file (frame1.jpg, frame2.jpg, ...)
                    i += 1 # next file counter
                else:
                    break
    
                cv2.waitKey(100) #(for debugging)
    
            cap.release() #Release must be inside the outer loop
            
    all_frame=frames_multiple_videos('*your_directory*')
    

    【讨论】:

      【解决方案2】:

      如果我猜对了,您希望以特定帧数提取目录中的每个视频,对吧? 你可以试试这个代码!

      for line in f.readlines(): #reading each video in directory, in this case I save in txt and read each line
          frame_reader = imageio.get_reader(link_video, 'ffmpeg', mode='I')
          start_idx, end_idx = 10, 70
          save_mat = np.full((output_size, output_size, 3, 1), 0) #please define the size of frame
          for frame_num, frame in enumerate(frame_reader):
              if frame_num >= end_idx:
                 break
              if frame_num <= start_idx:
                 continue
              save_mat = np.concatenate((save_mat, np.expand_dims(frame, axis=3)), axis=3)
      
           
      

      【讨论】:

      • 什么是ffmg,我们是否需要下载任何软件/驱动程序来处理它。我听说在某个地方我们需要先配置才能使用它。
      猜你喜欢
      • 2014-09-30
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多