From: Guillaume Pellerin Date: Wed, 5 Oct 2022 10:11:55 +0000 (+0200) Subject: add Media.set_duration, ffmpeg X-Git-Tag: 2.8.1-pro~78 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=97c82bb0246bd907d729d2038d54b0e4f78b2209;p=teleforma.git add Media.set_duration, ffmpeg --- diff --git a/debian-packages.txt b/debian-packages.txt index 8a529a87..b91c4e21 100644 --- a/debian-packages.txt +++ b/debian-packages.txt @@ -9,3 +9,4 @@ python3-psycopg2 python3-yaml uwsgi gettext +ffmpeg diff --git a/teleforma/management/commands/teleforma-import-seminar-media-update.py b/teleforma/management/commands/teleforma-import-seminar-media-update.py index 09154fb2..1274b4be 100644 --- a/teleforma/management/commands/teleforma-import-seminar-media-update.py +++ b/teleforma/management/commands/teleforma-import-seminar-media-update.py @@ -185,7 +185,6 @@ class Command(BaseCommand): path = dir + os.sep + filename seminar_title = '_'.join([course_code, str(seminar_rank)]) - collection_id = '_'.join([department_name, seminar_title]) course = Course.objects.get(code=course_code) department, c = Department.objects.get_or_create(name=department_name, organization=organization) diff --git a/teleforma/models/core.py b/teleforma/models/core.py index 684c47c1..2de2044f 100755 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -116,6 +116,7 @@ class MetaCore: app_label = app_label + class ClonableMixin(object): def clone(self): @@ -652,6 +653,7 @@ class Media(MediaBase): elif self.conference: self.conference.course.save() self.set_mime_type() + self.set_duration() def poster_url(self, geometry='640'): url = '' @@ -672,11 +674,31 @@ class Media(MediaBase): m.save() return markers + def set_duration(self): + """ + set media duration + """ + if self.file: + process = subprocess.Popen(["ffmpeg", "-i", self.file.path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + stdout, stderr = process.communicate() + try: + pattern = re.compile(r'Duration: ([\w.-]+):([\w.-]+):([\w.-]+),') + match = pattern.search(stdout) + duration = "%s:%s:%s" % (match.group(1), match.group(2), match.group(3)) + except: + duration = None + else: + duration = None + + self.approx_duration = duration + class Meta(MetaCore): db_table = app_label + '_' + 'media' ordering = ['rank'] + + class SuggestionsMixin(Model): suggested_seminars = models.ManyToManyField('teleforma.Seminar', related_name="%(class)ss_related", verbose_name=_('suggested seminars'),