Сгенерировать скриншоты из видео с помощью ffmpeg

Solo_777

У меня в папке есть много видео-файлов, с названиями вида: 1.mp4, 2.mp4,...

Задача сделать по 10 скриншотов в формате jpg с каждого видео, поместив их во вновь созданные папки с названием видеофайла, т.е в папки "1", "2", ....

Подскажите команду или куда копать. Спасибо.

2 ответа

Solo_777

WinFF - is a graphical user interface for FFmpeg or avconv. It will convert almost any video file that FFmpeg or avconv will convert. WinFF does multiple files in multiple formats at one time. You can, for example, convert mpeg's, flv's, and mov's into avi's (or DVD/VCD format or MPEG or 3gp etc.) all at once.


Solo_777

Я для себя решил эту задачу на python так:

import os, subprocess, json, shutil

PATH_TO = '/path/to/files/' # директория с видео
NUMBER_OF_FRAMES = 20 # количество скриншотов

def create_snapshots(filename):

    print('Create snapshot to '+filename)

    #get video duration from FFprobe
    data = subprocess.Popen(
        ["ffprobe", "-v", "error", "-print_format", "json", "-show_entries", "format=duration",  PATH_TO+filename],
        stdout=subprocess.PIPE
        ).communicate()

    duration = json.loads(data[0].decode("utf-8"))['format']['duration']

    print('duration in sec: '+str(duration))
    now = round(float(duration))
    print('duration in format: '+str(now // 3600) + ':' + str(now // 60 % 60) + ':' + str(now % 60))

    interval = round(float(duration)/NUMBER_OF_FRAMES)-1
    print('interval: '+str(interval))

    #make snapshots folder
    tmp_v = PATH_TO+str(filename)+'s'
    if not os.path.exists(tmp_v):       
        os.mkdir(tmp_v)

    for i in range(NUMBER_OF_FRAMES):        
        now = interval*(i+1)
        time = str(now // 3600) + ':' + str(now // 60 % 60) + ':' + str(now % 60)
        FFMPEG_SNAPSHOT_COMMAND = 'ffmpeg -ss '+time+' -i '+PATH_TO+filename+' -vframes 1 -q:v 2 '+PATH_TO+filename+'s/'+str(i+1)+'.jpg -y'
        try:
            os.system(FFMPEG_SNAPSHOT_COMMAND)
            print('Build '+str(i+1)+'.jpg: OK')
        except:
            print('Build '+str(i+1)+'.jpg: ERROR')

licensed under cc by-sa 3.0 with attribution.