In [ ]:
import argparse
import youtube_dl
import ffmpy
import os
import numpy as np
In [ ]:
# extract frames form url at given time and saves it into output_file
def save_frame(url, time, output_file):
ff = ffmpy.FFmpeg(
inputs={url: '-ss ' + str(time) + ' -t 1'},
outputs={output_file: '-f mjpeg'})
ff.run()
In [ ]:
# search youtube with youtube-dl and extracts frames from each search results respects to its parameters
def search_and_extract(query, name, video_per_query, frames_per_video):
print('Processing links for: {}'.format(name))
ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s'})
with ydl:
search_results = ydl.extract_info('ytsearch' + str(video_per_query) + ':' + str(query), download=False)
if not os.path.exists(name):
os.makedirs(name)
for idx, sresult in enumerate(search_results['entries']):
video_link = sresult['formats'][-1]['url']
duration = sresult['duration']
times = np.random.choice(duration - 1, frames_per_video, replace=False)
for t in times:
file_name = os.path.join(name, name + '-' + str(idx) + '-frame-' + str(t) + '.jpg')
save_frame(video_link, t, file_name)
In [ ]:
search_and_extract(query='gta v', name='gta', video_per_query=2, frames_per_video=3)