Exemplo n.º 1
0
    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")
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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")
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
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