ИМ
Dec. 10, 2018, 12:55 a.m.
a bytes-like object is required, not 'str' в videokit
Доброго времени суток. Нашел приложение для конвертации видео + celery что очень радует. Не радует только то что оно отказывается работать под python3
Трейсбек прикладываю:
- File "/home/django/venv/example/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
- response = get_response(request)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
- response = self.process_exception_by_middleware(e, request)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
- response = wrapped_callback(request, *callback_args, **callback_kwargs)
- File "/home/django/example/media/views.py", line 32, in item_create
- media_item.save()
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/base.py", line 796, in save
- force_update=force_update, update_fields=update_fields)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/base.py", line 824, in save_base
- updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/base.py", line 908, in _save_table
- result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/base.py", line 947, in _do_insert
- using=using, raw=raw)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
- return getattr(self.get_queryset(), name)(*args, **kwargs)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/query.py", line 1045, in _insert
- return query.get_compiler(using=using).execute_sql(return_id)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1053, in execute_sql
- for sql, params in self.as_sql():
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1006, in as_sql
- for obj in self.query.objs
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1006, in <listcomp>
- for obj in self.query.objs
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1005, in <listcomp>
- [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 955, in pre_save_val
- return field.pre_save(obj, add=True)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/fields/files.py", line 292, in pre_save
- file.save(file.name, file, save=False)
- File "/home/django/venv/example/lib/python3.5/site-packages/django/db/models/fields/files.py", line 92, in save
- setattr(self.instance, self.field.name, self.name)
- File "/home/django/example/videokit/fields.py", line 198, in __set__
- self.field.update_dimension_fields(instance, force = True)
- File "/home/django/example/videokit/models.py", line 119, in update_dimension_fields
- width = file.width
- File "/home/django/example/videokit/fields.py", line 133, in _get_width
- return self._get_video_dimensions()[0]
- File "/home/django/example/videokit/fields.py", line 164, in _get_video_dimensions
- self._dimensions_cache = get_video_dimensions(self)
- File "/home/django/example/videokit/fields.py", line 25, in get_video_dimensions
- width = stdout.strip(' \t\n\r')
- TypeError: a bytes-like object is required, not 'str'
- [09/Dec/2018 18:34:05] "POST /item_create/ HTTP/1.1" 500 151897
И функцию в которой ошибка:
- from django.conf import settings
- from django.core.files import File
- from django.db.models.fields.files import FieldFile
- from django.db.models.fields.files import FileDescriptor
- from datetime import datetime
- import hashlib
- import os.path
- import subprocess
- from videokit.apps import VideokitConfig
- from videokit.tasks import generate_video
- def get_video_dimensions(file):
- path = os.path.join(settings.MEDIA_ROOT, file.name)
- if os.path.isfile(path):
- try:
- process = subprocess.Popen(
- ['mediainfo', '--Inform=Video;%Width%', path],
- stdout = subprocess.PIPE, stderr = subprocess.PIPE)
- stdout, stderr = process.communicate()
- if process.wait() == 0:
- width = int(stdout.strip(' \t\n\r'))
- else:
- return (0,0)
- process = subprocess.Popen(
- ['mediainfo', '--Inform=Video;%Height%', path],
- stdout = subprocess.PIPE, stderr = subprocess.PIPE)
- stdout, stderr = process.communicate()
- if process.wait() == 0:
- height = int(stdout.strip(' \t\n\r'))
- else:
- return (None, None)
- return (width, height)
- except OSError:
- pass
- return (None, None)
Очень надеюсь на вашу помощь. Заранее благодарен.
2
100
Do you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- МАApril 1, 2025, 4:21 p.m.0ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Добрый день!
Вам не нужно было сначала считать это всё из stdout?
Автор кода не я. Решение нашел на одном забугорном ресурсе.
Все работает, но я не уверен что это правильное решение. Что скажете?
Если не ошибаюсь, то decode должен возвращать str в с декодированием из utf8 в данном случае, а потом вы вырезаете лишние элементы, так что всё правильно на мой взгляд. Ну и напоследок преобразуете строку в int. В принципе всё верно. Не вижу причин, чтобы данный код был неправильным.
Спасибо за пояснение.