Как проверить файл mp4 или аудио файлы в целом с python? - PullRequest
0 голосов
/ 07 января 2020

У меня есть API отдыха, созданный с помощью Django rest Framework, один из его сериализаторов должен принимать Base64file, который является нашим аудиофайлом, теперь мне нужно просто проверить и проверить декодированный файл, чтобы я мог знать, действительно ли это mp4 или любой другой тип аудио в целом или нет.

проблема в том, что иногда аудиофайл после выгрузки и сохранения поврежден и не может быть воспроизведен, поэтому выполнение этой проверки необходимо, чтобы убедиться, что файл отправлено правильно, или оно было отправлено поврежденным на первом месте.

Я копался в Google, и Inte rnet в поисках чего-либо может выполнить эту простую задачу, но все, что я нашел, это как проигрывать аудио или манипулировать им, Я даже не нашел что-то, что может вызвать исключение, если файл недопустим при попытке открыть его.

для получения дополнительной информации. Я использую django -extra-fields , я использую Base64FileField для реализации моего поля Audio file, они предоставили пример для этого как PDF, я пытаюсь сделать этот аналогичный способ для аудио но что меня удерживает, так это проверка звука.

Пример PDF:

class PDFBase64File(Base64FileField):
    ALLOWED_TYPES = ['pdf']

    def get_file_extension(self, filename, decoded_file):
        try:
            PyPDF2.PdfFileReader(io.BytesIO(decoded_file))
        except PyPDF2.utils.PdfReadError as e:
            logger.warning(e)
        else:
            return 'pdf'

Что сделано на данный момент:

class AudioBase64File(Base64FileField):
    ALLOWED_TYPES = (
        'amr',
        'ogg',
        'm4a',
        '3gp',
        'aac',
        'mp4',
        'mp3',
        'flac'
    )
    INVALID_FILE_MESSAGE = ("Please upload a valid audio.")
    INVALID_TYPE_MESSAGE = ("The type of the audio couldn't be determined.")

    def get_file_extension(self, filename, decoded_file):
        # missing validation
        return 'mp4'

1 Ответ

0 голосов
/ 07 января 2020

Вы можете использовать ffmpeg.

Вы можете прочитать файл и посмотреть, есть ли какая-либо ошибка или нет. ffmpeg сообщит о любой ошибке при чтении файла.

Вы также можете пропустить некоторые части видео только для того, чтобы сделать его быстрее, но чтение файла без каких-либо действий довольно быстро и должно быть достаточно хорошим.

ffmpeg -v error -i file.mp4 -f null - 2>error.log

Как проверить целостность видеофайла (avi, mpeg, mp4…)?

ffmpeg

...