Skip to content

Instantly share code, notes, and snippets.

@solusipse
Last active August 29, 2015 14:00
Show Gist options
  • Select an option

  • Save solusipse/edb6b5fb7e4f1a7ea07b to your computer and use it in GitHub Desktop.

Select an option

Save solusipse/edb6b5fb7e4f1a7ea07b to your computer and use it in GitHub Desktop.

Revisions

  1. solusipse renamed this gist Jan 13, 2015. 1 changed file with 6 additions and 0 deletions.
    6 changes: 6 additions & 0 deletions gistfile1.py → ytwebm.py
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,9 @@
    '''
    Sample usage:
    python ytwebm.py https://www.youtube.com/watch?v=dQw4w9WgXcQ -s 01:45 -l 5
    This will create webm file from youtube video from 01:45 to 01:50
    '''

    import youtube_dl, subprocess, os, argparse

    class Downloader:
  2. solusipse created this gist May 2, 2014.
    60 changes: 60 additions & 0 deletions gistfile1.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    import youtube_dl, subprocess, os, argparse

    class Downloader:

    def __init__(self, quality = 43):
    initial_settings = {'outtmpl': '%(id)s.%(ext)s', 'format': str(quality)}

    self.ydl = youtube_dl.YoutubeDL(initial_settings)
    self.ydl.add_default_info_extractors()

    def get_video(self, url):
    info = self.ydl.extract_info(url, download=True)
    return self.ydl.prepare_filename(info)

    def remove_video(self, file):
    os.remove(file)


    class Clipper:

    def __init__(self, filename, start, lenght):

    output = filename.split('.')[0] + '_clip.' + filename.split('.')[1]
    params = ['ffmpeg', '-i', filename, '-acodec', 'copy', '-vcodec', 'copy', '-y']

    if start:
    params.extend(['-ss', start])
    if lenght:
    params.extend(['-t', lenght])

    params.append(output)

    p = subprocess.Popen(params)
    p.communicate()


    class WebmYT:

    def __init__(self, video, start, lenght, quality=1):
    sq = 43
    if quality == 2:
    sq = 45
    dwn_handler = Downloader(sq)
    filename = dwn_handler.get_video(video)
    Clipper(filename, start, lenght)

    dwn_handler.remove_video(filename)


    def argvparser():
    parser = argparse.ArgumentParser(prog="yt_webm")
    parser.add_argument("video", help="Url of Youtube video to be downloaded.")
    parser.add_argument("-s", "--start", help="Set start point for the clip.", metavar="hh:mm:ss")
    parser.add_argument("-l", "--lenght", help="Set lenght of the clip.", metavar="hh:mm:ss")
    parser.add_argument("-q", "--quality", type=int, help="Quality of webm video.", choices=[1, 2])
    args = parser.parse_args()

    WebmYT(args.video, args.start, args.lenght, quality=args.quality)

    argvparser()