def testNewContentFromTestContentDir(self): self.assertTrue( os.path.isdir(TEST_CONTENT_DIR), "Directory '%s' containing test files does not exist." % TEST_CONTENT_DIR) files = os.listdir(TEST_CONTENT_DIR) print("\n\nFAILEJA", TEST_CONTENT_DIR, files) self.assertGreater( len(files), 0, "Directory '%s' containing test files is empty." % TEST_CONTENT_DIR) cnt = 0 for filename in files: cnt += 1 c = Content(caption="New content #%d" % cnt) full_path = os.path.join(TEST_CONTENT_DIR, str(filename)) c.set_file(str(filename), full_path) c.set_fileinfo() c.generate_thumbnail() c.save() maintype = c.mimetype.split("/")[0] print("MIMETYYPPI", c.mimetype, c.preview) if maintype in ["video", "audio"]: ffp = content.filetools.FFProbe(c.file.path) info = content.filetools.fileinfo(c.file.path) print(info) if ffp.is_video(): new_video, cmd_str, output = create_videoinstance( c.file.path) vi = Videoinstance(content=c) vi.save() vi.set_file(new_video, "webm") vi.set_metadata(info) vi.save() print("%s %.1f sec %dx%d pix" % (vi.mimetype, vi.duration, vi.width, vi.height)) if ffp.is_audio(): new_audio, cmd_str, output = create_audioinstance( c.file.path) ai = Audioinstance(content=c) ai.save() ai.set_file(new_audio, "ogg") ai.set_metadata(info) ai.save() print("%s %.1f sec" % (ai.mimetype, ai.duration)) self.all_content.append(c) # self.assertEqual(c.file.path, "sd", c.file.path) # import time # time.sleep(20) self.assertEqual(Content.objects.count(), len(self.all_content), "1 or more files failed")
def testNewContentSaving(self): self.assertTrue( os.path.isdir(TEST_CONTENT_DIR), f"Directory '{TEST_CONTENT_DIR}' containing test files does not exist." ) files = os.listdir(TEST_CONTENT_DIR) self.assertGreater( len(files), 0, f"Directory '{TEST_CONTENT_DIR}' containing test files is empty.") cnt = 0 for filename in files: full_path = os.path.join(TEST_CONTENT_DIR, str(filename)) if os.path.isfile(full_path) is False: print(f"Skip {full_path}, not a file") continue cnt += 1 c = Content(caption="New content #%d" % cnt) c.set_file(str(filename), full_path) c.set_fileinfo() c.generate_thumbnail() c.save() maintype = c.mimetype.split("/")[0] if maintype in ["video", "audio"]: ffp = content.filetools.FFProbe(c.file.path) info = content.filetools.fileinfo(c.file.path) print(info) if ffp.is_video(): new_video, cmd_str, output = create_videoinstance( c.file.path) vi = Videoinstance(content=c) vi.save() vi.set_file(new_video, "webm") vi.set_metadata(info) vi.save() print( f"{c.mimetype} {c.preview} {vi.mimetype} {vi.duration:.1f} sec {vi.width}x{vi.height} px" ) if ffp.is_audio(): new_audio, cmd_str, output = create_audioinstance( c.file.path) ai = Audioinstance(content=c) ai.save() ai.set_file(new_audio, "ogg") ai.set_metadata(info) ai.save() print( f"{c.mimetype} {c.preview} {ai.mimetype} {ai.duration:.1f} sec" ) self.all_content.append(c)
def testNewContentSaving(self): self.assertTrue(os.path.isdir(TESTCONTENT_DIR), "Directory '%s' containing test files does not exist." % TESTCONTENT_DIR) files = os.listdir(TESTCONTENT_DIR) self.assertGreater(len(files), 0, "Directory '%s' containing test files is empty." % TESTCONTENT_DIR) cnt = 0 for filename in files: cnt += 1 c = Content(caption=u'New content #%d' % cnt) full_path = os.path.join(TESTCONTENT_DIR, filename) if not os.path.isfile(full_path): continue c.set_file(filename, full_path) c.set_fileinfo() c.generate_thumbnail() c.save() maintype = c.mimetype.split('/')[0] print "MIMETYYPPI", c.mimetype, c.preview if maintype in ['video', 'audio']: ffp = content.filetools.FFProbe(c.file.path) info = content.filetools.fileinfo(c.file.path) print info #finfo = get_ffmpeg_videoinfo(c.file.path) #print finfo if ffp.is_video(): new_video, cmd_str = create_videoinstance(c.file.path) vi = Videoinstance(content=c) vi.save() vi.set_file(new_video, 'webm') #info = get_videoinfo(get_ffmpeg_videoinfo(vi.file.path)) vi.set_metadata(info) vi.save() print u'%s %.1f sec %dx%d pix' % (vi.mimetype, vi.duration, vi.width, vi.height) if ffp.is_audio(): new_audio, cmd_str = create_audioinstance(c.file.path) ai = Audioinstance(content=c) ai.save() ai.set_file(new_audio, 'ogg') #info = get_audioinfo(get_ffmpeg_videoinfo(ai.file.path)) #print info ai.set_metadata(info) ai.save() print u'%s %.1f sec' % (ai.mimetype, ai.duration) #print c.get_type_instance() #print c.caption self.all_content.append(c) #self.assertEqual(c.file.path, "sd", c.file.path) #import time #time.sleep(20) self.assertEqual(Content.objects.count(), len(self.all_content), "1 or more files failed")
def create_instances(limit: int, pk: int, uid: str, redo: bool): qset = Q(mimetype__startswith="video") | Q(mimetype__startswith="audio") contents = Content.objects.filter(qset) if uid: contents = contents.filter(uid=uid) if pk: contents = contents.filter(pk=pk) contents = contents.order_by("-created") if limit > 0: contents = contents[:limit] for c in contents: log.info( f"Preparing to handle {c} (created at {c.created.isoformat()})") old_instances = list(c.audioinstances.all()) + list( c.videoinstances.all()) if old_instances: if redo: for inst in old_instances: if inst.file and os.path.isfile(inst.file.path): log.debug(f"Deleting old instance {inst.file.path}") os.unlink(inst.file.path) inst.delete() else: log.debug(f"{c} has already {len(old_instances)} instances") continue ffp = content.filetools.FFProbe(c.file.path) if ffp.is_video(): # scale = "scale=640:trunc(ow/a/2)*2" # scale width to 640 px scale = "scale=trunc(oh*a/2)*2:360" # scale height to 360 px (360p) webm_params = [ "-acodec", "libvorbis", "-ac", "2", "-ab", "96k", "-ar", "22050", "-vf", scale ] mp4_params = [ "-vcodec", "libx264", "-preset", "fast", "-vprofile", "baseline", "-vsync", "2" ] mp4_params += [ "-ab", "64k", "-async", "1", "-f", "mp4", "-vf", scale, "-movflags", "faststart" ] params = ( ("webm", "video/webm", webm_params), ("mp4", "video/mp4", mp4_params), ) for x in params: ext, mimetype, param = x new_video, cmd_str, output = create_videoinstance(c.file.path, param, ext=ext) ffp2 = content.filetools.FFProbe(new_video) info = ffp2.get_videoinfo() if not info: msg = f"ffmpeg video instance command failed: {cmd_str}" log.warning(msg) os.unlink(new_video) continue vi = Videoinstance(content=c, command=cmd_str) vi.save() vi.set_file(new_video, ext) ffp2 = content.filetools.FFProbe(vi.file.path) info = ffp2.get_videoinfo() vi.set_metadata(info) vi.save() log.debug( f"{vi.mimetype}, {vi.duration}, {vi.width}, {vi.height}") elif ffp.is_audio(): params = ( ("ogg", "audio/ogg", ["-acodec", "libvorbis", "-ab", "32k"]), ("mp3", "audio/mpeg", ["-acodec", "libmp3lame", "-ab", "64k"]), ) for x in params: ext, mimetype, param = x new_video, cmd_str, output = create_audioinstance(c.file.path, param, ext=ext) ffp2 = content.filetools.FFProbe(new_video) info = ffp2.get_audioinfo() if not info: msg = f"ffmpeg audio instance command failed: {cmd_str}" log.warning(msg) os.unlink(new_video) continue ai = Audioinstance(content=c, command=cmd_str) ai.save() ai.set_file(new_video, ext) ffp2 = content.filetools.FFProbe(ai.file.path) info = ffp2.get_audioinfo() ai.set_metadata(info) if "mimetype" in info: ai.mimetype = info["mimetype"] ai.save()
def create_instances2(limit, pk, uid, redo): qset = Q(mimetype__startswith='video') | Q(mimetype__startswith='audio') contents = Content.objects.filter(qset) if uid: contents = contents.filter(uid=uid) if pk: contents = contents.filter(pk=pk) contents = contents.order_by('-created') if limit > 0: contents = contents[:limit] for c in contents: print c, c.created old_instances = list(c.audioinstances.all()) + \ list(c.videoinstances.all()) if old_instances: if redo: for inst in old_instances: if inst.file and os.path.isfile(inst.file.path): print "DELETING", inst.file.path os.unlink(inst.file.path) inst.delete() else: print "%s has already %d instances" % (c, len(old_instances)) continue ffp = content.filetools.FFProbe(c.file.path) if ffp.is_video(): finfo = ffp.get_videoinfo() # print finfo params = ( ('webm', 'video/webm', [ '-acodec', 'libvorbis', '-ac', '2', '-ab', '96k', '-ar', '22050', '-vf', 'scale=320:trunc(ow/a/2)*2' ]), ('mp4', 'video/mp4', [ '-vcodec', 'libx264', '-preset', 'fast', '-vprofile', 'baseline', '-vsync', '2', '-ab', '64k', '-async', '1', '-f', 'mp4', '-vf', 'scale=320:trunc(ow/a/2)*2', '-movflags', 'faststart' ]), ) for x in params: ext, mimetype, param = x new_video, cmd_str = create_videoinstance(c.file.path, param, ext=ext) # print cmd_str ffp2 = content.filetools.FFProbe(new_video) info = ffp2.get_videoinfo() if not info: msg = "FFMPEG/VIDEOINSTANCE FAILED: %s" % cmd_str log.warn(msg) os.unlink(new_video) continue vi = Videoinstance(content=c, command=cmd_str) vi.save() vi.set_file(new_video, ext) ffp2 = content.filetools.FFProbe(vi.file.path) info = ffp2.get_videoinfo() vi.set_metadata(info) vi.save() print vi.mimetype, vi.duration, vi.width, vi.height elif ffp.is_audio(): params = ( ('ogg', 'audio/ogg', ['-acodec', 'libvorbis', '-ab', '32k']), ('mp3', 'audio/mpeg', ['-acodec', 'libmp3lame', '-ab', '64k']), ) for x in params: ext, mimetype, param = x new_video, cmd_str = create_audioinstance(c.file.path, param, ext=ext) ffp2 = content.filetools.FFProbe(new_video) info = ffp2.get_audioinfo() if not info: msg = "FFMPEG/AUDIOINSTANCE FAILED: %s" % cmd_str log.warn(msg) os.unlink(new_video) continue ai = Audioinstance(content=c, command=cmd_str) ai.save() ai.set_file(new_video, ext) ffp2 = content.filetools.FFProbe(ai.file.path) info = ffp2.get_audioinfo() # print info ai.set_metadata(info) if 'mimetype' in info: ai.mimetype = info['mimetype'] ai.save() print ai.mimetype, ai.duration