Advertisement
clockworkpc

Tubemixing: Save videos, fetch gdata, rename, extract mp3

Jun 11th, 2013
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/python
  2. #/home/clockworkpc/bin/tubemixingsave.py
  3.  
  4. # Released under a GPLv3 Licence by Clockwork PC 2013
  5. # www.clockworkpc.com.au
  6.  
  7. # You are entitled to the following four freedoms:
  8. # Freedom 0: To run this program for any purpose
  9. # Freedom 1: To study how this program works and change it to make it do what you wish
  10. # Freedom 2: To redistribute copies so you can help your neighbour
  11. # Freedom 3: To distribute copies of your modified version to others
  12.  
  13. import os, datetime, re, shutil
  14.  
  15. now = datetime.datetime.now()
  16. nowstring = str(now.strftime("%Y-%m-%d_%A_%H%M%S"))
  17.  
  18. #print nowstring
  19.  
  20. tubemixingFolder = "/tmp/tubemixing/"
  21. videoFolder = os.getenv("HOME") + "/Videos/"
  22. saveFolder = videoFolder + "tubemixing/"
  23. originalVideosFolder = saveFolder + "OriginalVideos/"
  24. namedVideosFolder = saveFolder + "NamedVideos/"
  25. namedVideosFolderDateStamped = namedVideosFolder + nowstring + "/"
  26. videoListsFolder = saveFolder + "VideoLists/"
  27. videoListsFile = videoListsFolder + nowstring
  28. videoDataFolder = saveFolder + "gdata_text_files/"
  29. videoDataFolderDatestamped = saveFolder + "gdata_text_files/" + nowstring + "/"
  30. mp3Folder = os.getenv("HOME") + "/Music/tubemixing/" + nowstring + "/"
  31. gdataFeed = "http://gdata.youtube.com/feeds/api/videos/"
  32.  
  33. #Create date-stamped folders
  34. os.system("mkdir " + namedVideosFolderDateStamped)
  35. os.system("mkdir " + mp3Folder)
  36. os.system("mkdir " + videoDataFolderDatestamped)
  37.  
  38. # Match only videos that haven't already been saved
  39. a = os.listdir(tubemixingFolder)
  40. b = os.listdir(originalVideosFolder)
  41. c = [x for x in a if x not in b]
  42.  
  43. # File-only os.listdir
  44. def saveFolder_files_list():
  45.     for file in os.listdir(saveFolder):
  46.         if os.path.isfile(os.path.join(saveFolder,file)):
  47.             return file
  48.  
  49. def files_only(saveFolder):
  50.     return [filename for filename in os.listdir(saveFolder) if os.path.isfile(os.path.join(saveFolder, filename))]
  51.  
  52. def files_only(videoDataFolderDatestamped):
  53.     return [filename for filename in os.listdir(videoDataFolderDatestamped) if os.path.isfile(os.path.join(videoDataFolderDatestamped, filename))]
  54.  
  55. # Copy NEW videos from Tubemixing temp folder to working folder
  56. for file in c:
  57.     shutil.copyfile(tubemixingFolder+file,saveFolder+file)
  58. # Copy NEW videos to archive folder for future reference
  59.     shutil.copyfile(tubemixingFolder+file,originalVideosFolder+file)
  60.  
  61. # Remove prefix
  62. # NOTE: I set Tubemixing to save by default to 360p.  
  63. # You'll have to tweak it if you save higher resolution by default.
  64. preFix1 = "tubemixing-360p-"
  65. preFix2 = "tubemixing--"
  66.  
  67. #os.listdir(saveFolder)
  68. for filename in files_only(saveFolder):
  69.     if filename.startswith(preFix1):
  70.         os.rename(saveFolder+filename,saveFolder+filename[16:])
  71.  
  72. # Second pass (some files are saved with preFix2)
  73. os.listdir(saveFolder)
  74. for filename in files_only(saveFolder):
  75.     if filename.startswith(preFix2):
  76.         os.rename(saveFolder+filename,saveFolder+filename[12:])
  77.  
  78. # Use gdata to fetch video title from YouTube
  79. for filename in files_only(saveFolder):
  80.     if len(filename) == 11:
  81.         os.system("cd " + videoDataFolderDatestamped + " && wget " + gdataFeed + filename + " " + "-O" + " " + filename)
  82.  
  83. # Parse video title from data fetched from YouTube
  84. print files_only(videoDataFolderDatestamped)
  85. for filename in files_only(videoDataFolderDatestamped):
  86.     f = open(videoDataFolderDatestamped+filename)
  87.     for line in f:
  88.         if "<title type='text'>" in line:
  89.             x = line
  90.             r = re.compile("<title type='text'>(.*?)</title><content")
  91.             m = r.search(x)
  92.             if m:
  93.                 titleInfo = m.group(1)
  94.                 print titleInfo
  95. # Using video title, save properly named and suffixed files in a new date-stamped folder
  96. # Using os.system instead of shutil because shutil is a FUCKING SLOW MEMORY HOG
  97.                 os.system("cp -v " + saveFolder+filename + " " + '"' + namedVideosFolderDateStamped+titleInfo+".webm" + '"')
  98. #                   shutil.copyfile(saveFolder+filename,namedVideosFolderDateStamped+titleInfo+".webm")
  99.  
  100. # Remove code-named video files, because originals have already been saved for reference
  101. # Unfortunately, the best I can do is use the clumsy rm command, which tries, but fails, to delete folders.  This is not the way to go, but I can't find a more elegant way of clearing the working folder.
  102.  
  103. for file in os.listdir(saveFolder):
  104.     os.system("rm -v " + saveFolder + file)
  105.  
  106. # Use AVconv (FFmpeg) to extract MP3 audio into the Music folder
  107. for filename in os.listdir(namedVideosFolderDateStamped):
  108.     (str, filename)
  109.     namedVideoFile = namedVideosFolderDateStamped + filename
  110.     print namedVideoFile
  111.  
  112.     os.system("avconv -i " + '"' + namedVideoFile + '"' + " " + '"' + mp3Folder + filename + '.mp3"')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement