无法打开文件v_YoYo_g07_c04.jpeg av_interleaved_write_frame():输入/输出错误

时间:2017-10-25 17:21:39

标签: ffmpeg python-3.5

以下代码的目的是从视频列表中提取帧。 为此,我在python 3.5 extract_frames函数中定义,它调用 extract_frame函数。在后者中,给出 ffmpeg 指令来提取帧

def extract_frames(vidlist,vidDir,outputDir):
    f = open(vidlist, 'r')
    vids = f.readlines()
    f.close()
    vids = [video.rstrip() for video in vids]
    for vid in vids:
        videoName = os.path.join(vidDir,vid.split('.')[0]+".avi")
        frameName = os.path.join(outputDir, vid.split('.')[0]+".jpeg")
        extract_frame(videoName,frameName)
extract_frames(trainlist01, ucf101_path,training_output)

这样:

ucf101_path = "/local/common-data/UCF/UCF-101" # Path to the root dataset
trainlist01="/local/common-data/UCF/ucfTrainTestlist/trainlist01.txt"
training_output = '/local/common-data/UCF/tmp_frames/train/'

其中 trainlist01.txt 包含以下一组行(第一列是视频的路径,第二列是视频的类):

ApplyEyeMakeup / v_ApplyEyeMakeup_g08_c01.avi 1 .....

视频名称 framename 例如对应于:

videoname="/local/common-data/UCF/UCF-101/YoYo/v_YoYo_g07_c04.avi"
framename="/local/common-data/UCF/tmp_frames/test/YoYo/v_YoYo_g07_c04.jpeg"

以下函数返回错误

import subprocess

    def extract_frame(videoName,frameName):

        if not os.path.exists(videoName):
            print('%s does not exist!' % videoName)
            return False
        # call ffmpeg and grab its stderr output
        p = subprocess.call('ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True)
        return p

错误是: [image2 @ 0x422ff80]无法打开文件:/local/common-data/UCF/tmp_frames/train/YoYo/v_YoYo_g25_c05.jpeg av_interleaved_write_frame():输入/输出错误

和输出文件 training_output 我应该得到我的帧是空的。

文件和文件夹广告子文件夹可以。

我的代码出了什么问题?

编辑1

创建子文件夹YoYo / in / local / common-data / UCF / tmp_frames / train /后再次运行代码我得到了这个新错误:

Could not get frame filename number 2 from pattern '/local/common-data/UCF/tmp_frames/train/YoYo/v_YoYo_g25_c05‌​.jpeg' (either set updatefirst or use a pattern like %03d within the filename pattern) av_interleaved_write_frame(): Invalid argument

1 个答案:

答案 0 :(得分:0)

使用以下命令修复问题:

p = subprocess.call('ffmpeg -i %s  -vf scale=224:-1 %s' % (videoName,frameName), shell=True)