利用ffmpeg多进程抽帧

import os
try:
    import cPickle
except:
    import pickle
from multiprocessing import Pool

rootpath = ""   # 存放视频的目录
outpath = ""    # 抽帧后存放目录
f1 = open("videolist.txt", "r")   # 每行为视频名
lines = [x.strip() for x in f1.readlines()]   # 生成视频序列list。[001.mp4, 002.mp4, ....]

def generate_pkl(entry):
    name = entry
    video_path = os.path.join(rootpath, name)

    vid = os.path.join(outpath, video_path.split('/')[-1].split(".")[0])
    if os.path.exists(video_path):
        if not os.path.exists(vid):
            os.makedirs(vid)
        # -q 代表保存图片质量。 -r 代表每秒钟的视频保存多少帧。
        os.system('ffmpeg -i ' + video_path + ' -q 0 ' + '-r 5 ' + vid + '/%06d.jpg')
    else:
        print("File not exists {}".format(video_path))
        return

pool = Pool(processes=6)  # 多进程
pool.map(generate_pkl, lines)
pool.close()
pool.join()

将视频抽帧ffmpeg命令:

ffmpeg -i test.mp4 -q 2 -r 5 ./imgs/%05d.jpg

其中-q代表质量,-r代表一秒抽取几帧


将图片帧合成为视频:

ffmpeg  -r 25 -pattern_type glob -i './test_out/*.png' -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4

其中-r代表帧率,一秒钟多少张图。-i为输入图片路径,最终输出为out.mp4

你可能感兴趣的:(视频分类)