示例#1
0
    def getMimeTye(self, path=None):
        path = self.__path if None == path else path
        if os.path.exists(path) and MediaInfo.can_parse(path):
            pass


#             MediaInfo.parse(filename, library_file, cover_data, encoding_errors, parse_speed, text, full, legacy_stream_display)
示例#2
0
 def functions(cls):
     return {
         'track': {
             'func': cls.track,
             'help':
             r'MediaInfo (https://mediaarea.net/en/MediaInfo) track data',
             'args': ['track id or type', 'property'],
             'example': 'track["Video","format"]',
             'source': 'demo.avi',
             'output': 'MPEG-4 Visual'
         },
     } if MediaInfo.can_parse() else {}
示例#3
0
    def create(cls, os_family=None, suggested_path=None):
        """Create the executor instance."""
        for candidate in define_candidate(cls.locations, cls.names, os_family,
                                          suggested_path):
            if MediaInfo.can_parse(candidate):
                lib = MediaInfo._get_library(candidate)
                lib.MediaInfo_Option.argtypes = [
                    c_void_p, c_wchar_p, c_wchar_p
                ]
                lib.MediaInfo_Option.restype = c_wchar_p
                version = MediaInfoExecutor._get_version(
                    lib.MediaInfo_Option(None, "Info_Version", ""))

                logger.debug('MediaInfo library detected: %s (v%s)', candidate,
                             '.'.join(map(str, version)))
                return MediaInfoCTypesExecutor(candidate, version)
示例#4
0
    def media_length(media_path):
        """
        Uses Media Info to obtain the media length

        :param media_path: The file path to be checked..
        """
        if MediaInfo.can_parse():
            media_data = MediaInfo.parse(media_path)
        else:
            xml = check_output([
                'mediainfo', '-f', '--Output=XML', '--Inform=OLDXML',
                media_path
            ])
            if not xml.startswith(b'<?xml'):
                xml = check_output(
                    ['mediainfo', '-f', '--Output=XML', media_path])
            media_data = MediaInfo(xml.decode("utf-8"))
        # duration returns in milli seconds
        return media_data.tracks[0].duration
示例#5
0
 def test_can_parse_true(self):
     self.assertTrue(MediaInfo.can_parse())
示例#6
0
        if ssh_enabled:
            logger.info("SSH and SFTP sessions created successfully")
        else:
            logger.warning("Disabling remote recoding due to SSH error")

    count = 0.0
    for path in paths:
        count += 1.0
        cur_file = normalize_path(path)
        ffmpeg_cmd = ffmpeg_base_cmd + "\"" + cur_file + "\""
        video_cmd = ' -c:v copy'
        audio_cmd = ' -c:a copy'
        need_remote = False
        redo_audio = False
        media_info = MediaInfo.parse(normalize_path(path))
        if MediaInfo.can_parse():
            for track in media_info.tracks:
                if track.track_type == 'Video':
                    if not track.bit_rate:
                        video_cmd = ffmpeg_video_encode
                        need_remote = True
                    elif not track.format.startswith(
                            VIDEO_CODEC
                    ) or track.bit_rate > MAX_BITRATE or track.height > MAX_HEIGHT or track.width > MAX_WIDTH:
                        video_cmd = ffmpeg_video_encode
                        need_remote = True
                    elif track.format.startswith(
                            VIDEO_CODEC
                    ) and not track.format_profile.startswith(VIDEO_PROFILE):
                        video_cmd = ffmpeg_video_encode
                        need_remote = True
示例#7
0
 def is_available():
     """Check if the parser is callable
     """
     return MediaInfo.can_parse()
示例#8
0
 def test_can_parse_true(self):
     self.assertTrue(MediaInfo.can_parse())
示例#9
0
def main():
    # Получаем исходную и целевую дирректории.
    dirslist = getDirs(sys.argv, DEFAULT_OUTPUT)
    # Показываем куда и откуда будет импорт.
    print('Источник импорта: ', dirslist[0])
    print('Дирректория назначения: ', dirslist[1])
    # Просим подтверждение перед началом работы.
    #if not confirm():
     #   sys.exit("Задание отменено")

    # Задаем счетчики "плохих" и "хороших" операций.
    fTotal = okOp = badOp = 0
    badFiles = []
    # Собственно, импорт.
    for root, dirs, files in os.walk(dirslist[0]):
        i = 0
        for name in files:
            i += 1
            fTotal += 1
            filePath = os.path.join(root, name)
            # Отображаем текущий процесс и прогресс выполнения.
            fileExtension = os.path.splitext(name)[1]
            print('Обработка файла {} из {} (дир. -= {} =-)'
                  .format(i, len(files), os.path.basename(root).upper()))
            if fileExtension.upper() == '.MP4' and MediaInfo.can_parse():
                media_info = MediaInfo.parse(filePath)
                # wrongDate = datetime.strptime(media_info.tracks[0].encoded_date, "UTC %Y-%m-%d %H:%M:%S").year == 1970
                # encodedDate = media_info.tracks[0].file_creation_date__local.replace('-', ':') if wrongDate else media_info.tracks[0].encoded_date.replace('-', ':')
                encodedDate = media_info.tracks[0].encoded_date.replace('-', ':')
                exifDateTime = encodedDate.replace('UTC ', '')

            elif fileExtension == '.JPG':
                with open(filePath, 'rb') as f:
                    tags = exifread.process_file(f, details=False)
                    exifDateTime = tags.get('EXIF DateTimeOriginal')

                    # При отсутствии у фото EXIF-данных - файл пропускаем,
                    # занося его в список "плохих" файлов.
                    if not exifDateTime:
                        print('Отсутствуют EXIF данные. Файл пропущен!!!', name)
                        badOp += 1
                        badFiles.append(filePath)
                        continue
            else:
                print('Неизвестный файл', name)
                badOp += 1
                badFiles.append(filePath)
                continue

            exifDate, exifTime = str(exifDateTime).split(' ')
            year, month, day = exifDate.split(':')
            hour, minute, sec = exifTime.split(':')


            # Задаем название импортированного файла.
            newFileName = '{}-{}-{}'.format(year + month + day, hour,
                                                 minute)
            path = dirslist[1]

            if not os.path.exists(path):
                print('Создаем новую папку')
                os.makedirs(path, exist_ok=True)
            newPath = os.path.join(path, newFileName)
            # Найдем подходящие имя для файла
            tmpPath = newPath
            fileindex = 1
            while os.path.exists(tmpPath + fileExtension):
                tmpPath = newPath + '_{}'.format(fileindex)
                fileindex += 1
            newPath = tmpPath + fileExtension
            try:
                shutil.copy2(filePath, newPath)
                print('OK')
                okOp += 1
            except (IOError, Exception) as e:
                print('BAD ' + e)
                badOp += 1
    # По завершении импорта выводим статистику сделанного.
    print('Обработано файлов всего:', fTotal)
    print('Успешных операций:', okOp)
    print('Завершенных с ошибками:', badOp)
    # И имена "плохих" файлов, если таковые есть.
    if len(badFiles):
        print('Необработанные файлы: ')
        for bf in badFiles:
            print(bf)