Ejemplo n.º 1
0
        def encode(src, variations, res_y):
            # For every variation in the list call video_encode
            # print "encoding {0}".format(variations)
            for v in variations:
                path = ffmpeg_encode(file_abs_path, v, res_y)
                # Update size data after encoding
                # (TODO) update status (non existing now)
                file_size = os.stat(path).st_size
                variation = files_collection.find_one(variations[v])
                variation['length'] = file_size
                # print variation
                file_asset = files_collection.find_and_modify(
                    {'_id': variations[v]}, variation)

                # rsync the file file (this is async)
                remote_storage_sync(path)
Ejemplo n.º 2
0
        def encode(src, variations, res_y):
            # For every variation in the list call video_encode
            # print "encoding {0}".format(variations)
            for v in variations:
                path = ffmpeg_encode(file_abs_path, v, res_y)
                # Update size data after encoding
                # (TODO) update status (non existing now)
                file_size = os.stat(path).st_size
                variation = files_collection.find_one(variations[v])
                variation['length'] = file_size
                # print variation
                file_asset = files_collection.find_and_modify(
                    {'_id': variations[v]},
                    variation)

                # rsync the file file (this is async)
                remote_storage_sync(path)
Ejemplo n.º 3
0
def process_file(src_file):
    """Process the file
    """

    files_collection = app.data.driver.db['files']

    file_abs_path = os.path.join(app.config['SHARED_DIR'], src_file['name'])
    src_file['length'] = os.stat(file_abs_path).st_size
    # Remove properties that do not belong in the collection
    del src_file['_status']
    del src_file['_links']
    content_type = src_file['content_type'].split('/')
    src_file['format'] = content_type[1]
    mime_type = content_type[0]
    src_file['path'] = src_file['name']

    if mime_type == 'image':
        from PIL import Image
        im = Image.open(file_abs_path)
        res = im.size
        src_file['width'] = res[0]
        src_file['height'] = res[1]
        # Generate previews

        build_thumbnails(file_id=src_file['_id'])
    elif mime_type == 'video':
        pass
        # Generate variations
        src_video_data = get_video_data(file_abs_path)
        variations = {
            'mp4': None,
            'webm': None
        }
        if src_video_data['duration']:
            src_file['duration'] = src_video_data['duration']

        # Properly resize the video according to 720p and 1080p resolutions
        if src_video_data['res_y'] < 1080:
            res_y = 720
        elif src_video_data['res_y'] >= 1080:
            res_y = 1080

        # Create variations in database
        for v in variations:
            root, ext = os.path.splitext(src_file['name'])
            filename = "{0}-{1}p.{2}".format(root, res_y, v)
            video_duration = None
            if src_video_data['duration']:
                video_duration = src_video_data['duration']

            file_object = dict(
                name=os.path.split(filename)[1],
                #description="Preview of file {0}".format(file_['name']),
                user=src_file['user'],
                parent=src_file['_id'],
                size="{0}p".format(res_y),
                duration=video_duration,
                format=v,
                width=src_video_data['res_x'],
                height=src_video_data['res_y'],
                content_type="video/{0}".format(v),
                length=0, # Available after encode
                md5="", # Available after encode
                filename=os.path.split(filename)[1],
                backend=src_file['backend'],
                path=filename)

            file_object_id = files_collection.save(file_object)
            # Append the ObjectId to the new list
            variations[v] = file_object_id


        def encode(src, variations, res_y):
            # For every variation in the list call video_encode
            # print "encoding {0}".format(variations)
            for v in variations:
                path = ffmpeg_encode(file_abs_path, v, res_y)
                # Update size data after encoding
                # (TODO) update status (non existing now)
                file_size = os.stat(path).st_size
                variation = files_collection.find_one(variations[v])
                variation['length'] = file_size
                # print variation
                file_asset = files_collection.find_and_modify(
                    {'_id': variations[v]},
                    variation)

                # rsync the file file (this is async)
                remote_storage_sync(path)
                # When all encodes are done, delete source file


        p = Process(target=encode, args=(file_abs_path, variations, res_y))
        p.start()
    if mime_type != 'video':
         # Sync the whole subdir
        sync_path = os.path.split(file_abs_path)[0]
    else:
        sync_path = file_abs_path
    remote_storage_sync(sync_path)

    files_collection = app.data.driver.db['files']
    file_asset = files_collection.find_and_modify(
        {'_id': src_file['_id']},
        src_file)
Ejemplo n.º 4
0
def process_file(src_file):
    """Process the file
    """

    files_collection = app.data.driver.db['files']

    file_abs_path = os.path.join(app.config['SHARED_DIR'], src_file['name'])
    src_file['length'] = os.stat(file_abs_path).st_size
    # Remove properties that do not belong in the collection
    del src_file['_status']
    del src_file['_links']
    content_type = src_file['content_type'].split('/')
    src_file['format'] = content_type[1]
    mime_type = content_type[0]
    src_file['path'] = src_file['name']

    if mime_type == 'image':
        from PIL import Image
        im = Image.open(file_abs_path)
        res = im.size
        src_file['width'] = res[0]
        src_file['height'] = res[1]
        # Generate previews

        build_thumbnails(file_id=src_file['_id'])
    elif mime_type == 'video':
        pass
        # Generate variations
        src_video_data = get_video_data(file_abs_path)
        variations = {'mp4': None, 'webm': None}
        if src_video_data['duration']:
            src_file['duration'] = src_video_data['duration']

        # Properly resize the video according to 720p and 1080p resolutions
        if src_video_data['res_y'] < 1080:
            res_y = 720
        elif src_video_data['res_y'] >= 1080:
            res_y = 1080

        # Create variations in database
        for v in variations:
            root, ext = os.path.splitext(src_file['name'])
            filename = "{0}-{1}p.{2}".format(root, res_y, v)
            video_duration = None
            if src_video_data['duration']:
                video_duration = src_video_data['duration']

            file_object = dict(
                name=os.path.split(filename)[1],
                #description="Preview of file {0}".format(file_['name']),
                user=src_file['user'],
                parent=src_file['_id'],
                size="{0}p".format(res_y),
                duration=video_duration,
                format=v,
                width=src_video_data['res_x'],
                height=src_video_data['res_y'],
                content_type="video/{0}".format(v),
                length=0,  # Available after encode
                md5="",  # Available after encode
                filename=os.path.split(filename)[1],
                backend=src_file['backend'],
                path=filename)

            file_object_id = files_collection.save(file_object)
            # Append the ObjectId to the new list
            variations[v] = file_object_id

        def encode(src, variations, res_y):
            # For every variation in the list call video_encode
            # print "encoding {0}".format(variations)
            for v in variations:
                path = ffmpeg_encode(file_abs_path, v, res_y)
                # Update size data after encoding
                # (TODO) update status (non existing now)
                file_size = os.stat(path).st_size
                variation = files_collection.find_one(variations[v])
                variation['length'] = file_size
                # print variation
                file_asset = files_collection.find_and_modify(
                    {'_id': variations[v]}, variation)

                # rsync the file file (this is async)
                remote_storage_sync(path)
                # When all encodes are done, delete source file

        p = Process(target=encode, args=(file_abs_path, variations, res_y))
        p.start()
    if mime_type != 'video':
        # Sync the whole subdir
        sync_path = os.path.split(file_abs_path)[0]
    else:
        sync_path = file_abs_path
    remote_storage_sync(sync_path)

    files_collection = app.data.driver.db['files']
    file_asset = files_collection.find_and_modify({'_id': src_file['_id']},
                                                  src_file)