From 0e8e2ea33350e1765682e6400ee27d49218c1330 Mon Sep 17 00:00:00 2001 From: Chris Griffith Date: Sun, 12 Mar 2023 12:33:29 -0500 Subject: [PATCH] Version 5.3.0 (#440) * Adding profile select in Load Directory window * Adding `avis` and `avifs` extensions for AV1 (thanks to u/zimmwisdom) * Fixing #439 QSVEnc QP mode select did not work in AVC / HEVC (thanks to sun6560032) * Fixing current profile window would not show --- CHANGES | 9 +- fastflix/data/languages.yaml | 102 ++++++++++++++++++ .../encoders/qsvencc_avc/settings_panel.py | 1 + .../encoders/qsvencc_hevc/settings_panel.py | 1 + .../encoders/svt_av1_avif/command_builder.py | 4 +- fastflix/encoders/svt_av1_avif/main.py | 2 +- fastflix/version.py | 2 +- fastflix/widgets/container.py | 2 +- fastflix/widgets/windows/multiple_files.py | 19 ++++ pyproject.toml | 2 +- 10 files changed, 137 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 4b8cc74c..b197be19 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,12 @@ # Changelog +## Version 5.3.0 + +* Adding profile select in Load Directory window +* Adding `avis` and `avifs` extensions for AV1 (thanks to u/zimmwisdom) +* Fixing #439 QSVEnc QP mode select did not work in AVC / HEVC (thanks to sun6560032) +* Fixing current profile window would not show + ## Version 5.2.3 * Fixing #433 queue_extras emptied on loading queue (thanks to Maddie Davis) @@ -44,8 +51,8 @@ * Adding AV1 support for rigaya's AMD hardware encoder! * Adding #192 a true portable mode for Windows (thanks to Demicro) +* Fixing #374 lookup for hdr10plus_tool (thanks to techore) * Fixing lookup for QSVEncC -* Fixing lookup for hdr10plus_tool * Fixing concat builder * Fixing #390 Wrong scale and behavior for DPI 250% on Windows (thanks to smtad) diff --git a/fastflix/data/languages.yaml b/fastflix/data/languages.yaml index 2cac15d7..cd6c1483 100644 --- a/fastflix/data/languages.yaml +++ b/fastflix/data/languages.yaml @@ -8377,3 +8377,105 @@ That video was added with an encoder that is no longer available, unable to load ukr: Це відео було додано за допомогою кодера, який більше не доступний і не може бути завантажений з черги kor: 해당 동영상은 더 이상 사용할 수 없는 인코더로 추가되어 대기열에서 로드할 수 없습니다. +'This profile will be applied to all the selected items:': + eng: 'This profile will be applied to all the selected items:' + deu: 'Dieses Profil wird auf alle ausgewählten Artikel angewendet:' + fra: 'Ce profil sera appliqué à tous les éléments sélectionnés :' + ita: 'Questo profilo verrà applicato a tutti gli elementi selezionati:' + spa: 'Este perfil se aplicará a todos los elementos seleccionados:' + zho: 这个配置文件将被应用于所有选定的项目。 + jpn: このプロファイルは、選択されたすべてのアイテムに適用されます。 + rus: 'Этот профиль будет применен ко всем выбранным элементам:' + por: 'Este perfil será aplicado a todos os artigos seleccionados:' + swe: 'Profilen tillämpas på alla markerade objekt:' + pol: 'Ten profil zostanie zastosowany do wszystkich wybranych elementów:' + ukr: 'Цей профіль буде застосовано до всіх вибраних елементів:' + kor: '이 프로필은 선택한 모든 항목에 적용됩니다:' +QP Mode: + eng: QP Mode + deu: QP-Modus + fra: Mode QP + ita: Modalità QP + spa: Modo QP + zho: QP模式 + jpn: QPモード + rus: Режим QP + por: Modo QP + swe: QP-läge + pol: Tryb QP + ukr: Режим QP + kor: QP 모드 +Constant Quality, Intelligent Constant Quality, Intelligent + Lookahead Constant Quality: + eng: Constant Quality, Intelligent Constant Quality, Intelligent + Lookahead Constant + Quality + deu: Konstante Qualität, Intelligent Konstante Qualität, Intelligent + Lookahead + Konstante Qualität + fra: Qualité constante, intelligente Qualité constante, intelligente + Lookahead + Qualité constante + ita: Qualità costante, Intelligente Qualità costante, Intelligente + Lookahead Qualità + costante + spa: Calidad constante, Inteligente Calidad constante, Inteligente + Lookahead Calidad + constante + zho: 恒定质量,智能恒定质量,智能+前瞻恒定质量 + jpn: 一定品質、インテリジェント一定品質、インテリジェント+ルックアヘッド一定品質 + rus: Постоянное качество, интеллектуальное постоянное качество, интеллектуальное + качество + опережающее постоянное качество + por: Qualidade Constante, Qualidade Constante Inteligente, Qualidade Constante Inteligente + + Lookahead + swe: Konstant kvalitet, intelligent Konstant kvalitet, intelligent + Lookahead Konstant + kvalitet + pol: Stała jakość, inteligentna stała jakość, inteligentna + Lookahead Stała jakość + ukr: Постійна якість, Інтелектуальна Постійна якість, Інтелектуальна + Lookahead + Постійна якість + kor: 일정한 품질, 지능형 일정한 품질, 지능형 + 룩어헤드 일정한 품질 +The following items were excluded as they could not be identified as a video files: + eng: The following items were excluded as they could not be identified as a video + files + deu: Die folgenden Elemente wurden ausgeschlossen, da sie nicht als Videodateien + identifiziert werden konnten + fra: Les éléments suivants ont été exclus car ils ne pouvaient pas être identifiés + comme des fichiers vidéo + ita: I seguenti elementi sono stati esclusi in quanto non potevano essere identificati + come file video + spa: Se excluyeron los siguientes elementos por no poder identificarse como archivos + de vídeo + zho: 以下项目被排除在外,因为它们不能被确定为视频文件 + jpn: 以下のものは、ビデオファイルとして識別できないため、除外した。 + rus: Следующие предметы были исключены, так как их нельзя было идентифицировать + как видеофайлы + por: Os seguintes itens foram excluídos por não poderem ser identificados como ficheiros + de vídeo + swe: Följande poster uteslöts eftersom de inte kunde identifieras som videofiler + pol: Następujące pozycje zostały wyłączone, ponieważ nie mogły być zidentyfikowane + jako pliki wideo + ukr: Наступні елементи були виключені, оскільки вони не могли бути ідентифіковані + як відеофайли + kor: 다음 항목은 동영상 파일로 식별할 수 없으므로 제외되었습니다. +more: + eng: more + deu: mehr + fra: plus + ita: di più + spa: más + zho: 更多 + jpn: も + rus: больше + por: mais + swe: mer + pol: więcej + ukr: більше + kor: 더 보기 +Loading Videos: + eng: Loading Videos + deu: Videos laden + fra: Chargement des vidéos + ita: Caricamento dei video + spa: Cargando vídeos + zho: 加载视频 + jpn: 動画読み込み + rus: Загружаемые видеоролики + por: Carregamento de vídeos + swe: Lastning av videoklipp + pol: Ładowanie filmów + ukr: Завантаження відео + kor: 동영상 로드 중 diff --git a/fastflix/encoders/qsvencc_avc/settings_panel.py b/fastflix/encoders/qsvencc_avc/settings_panel.py index 0331fdbf..21f71edd 100644 --- a/fastflix/encoders/qsvencc_avc/settings_panel.py +++ b/fastflix/encoders/qsvencc_avc/settings_panel.py @@ -323,6 +323,7 @@ def update_video_encoder_settings(self): level=self.widgets.level.currentText() if self.widgets.level.currentIndex() != 0 else None, b_frames=self.widgets.b_frames.currentText() if self.widgets.b_frames.currentIndex() != 0 else None, ref=self.widgets.ref.currentText() if self.widgets.ref.currentIndex() != 0 else None, + qp_mode=self.widgets.qp_mode.currentText(), ) encode_type, q_value = self.get_mode_settings() diff --git a/fastflix/encoders/qsvencc_hevc/settings_panel.py b/fastflix/encoders/qsvencc_hevc/settings_panel.py index abb7f459..603905a2 100644 --- a/fastflix/encoders/qsvencc_hevc/settings_panel.py +++ b/fastflix/encoders/qsvencc_hevc/settings_panel.py @@ -346,6 +346,7 @@ def update_video_encoder_settings(self): level=self.widgets.level.currentText() if self.widgets.level.currentIndex() != 0 else None, b_frames=self.widgets.b_frames.currentText() if self.widgets.b_frames.currentIndex() != 0 else None, ref=self.widgets.ref.currentText() if self.widgets.ref.currentIndex() != 0 else None, + qp_mode=self.widgets.qp_mode.currentText(), ) encode_type, q_value = self.get_mode_settings() diff --git a/fastflix/encoders/svt_av1_avif/command_builder.py b/fastflix/encoders/svt_av1_avif/command_builder.py index b89eddba..e6385444 100644 --- a/fastflix/encoders/svt_av1_avif/command_builder.py +++ b/fastflix/encoders/svt_av1_avif/command_builder.py @@ -73,10 +73,10 @@ def convert_me(two_numbers, conversion_rate=50_000) -> str: pass_type = "bitrate" if settings.bitrate else "QP" if settings.bitrate: - command_1 = f"{beginning} -b:v {settings.bitrate} {settings.extra} {ending} -f avif " + command_1 = f"{beginning} -b:v {settings.bitrate} {settings.extra} -f avif {ending}" elif settings.qp is not None: - command_1 = f"{beginning} -{settings.qp_mode} {settings.qp} {settings.extra} {ending} -f avif " + command_1 = f"{beginning} -{settings.qp_mode} {settings.qp} {settings.extra} -f avif {ending}" else: return [] return [Command(command=command_1, name=f"{pass_type}", exe="ffmpeg")] diff --git a/fastflix/encoders/svt_av1_avif/main.py b/fastflix/encoders/svt_av1_avif/main.py index 1ea252bf..2bb1742f 100644 --- a/fastflix/encoders/svt_av1_avif/main.py +++ b/fastflix/encoders/svt_av1_avif/main.py @@ -6,7 +6,7 @@ name = "AVIF (SVT AV1)" requires = "libsvtav1" -video_extensions = [".avif"] +video_extensions = [".avif", ".avis", ".avifs"] video_dimension_divisor = 8 ref = importlib.resources.files("fastflix") / f"data/encoders/icon_svt_av1.png" diff --git a/fastflix/version.py b/fastflix/version.py index 863f97aa..0d091aeb 100644 --- a/fastflix/version.py +++ b/fastflix/version.py @@ -1,4 +1,4 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -__version__ = "5.2.3" +__version__ = "5.3.0" __author__ = "Chris Griffith" diff --git a/fastflix/widgets/container.py b/fastflix/widgets/container.py index 4c90e76c..fc012603 100644 --- a/fastflix/widgets/container.py +++ b/fastflix/widgets/container.py @@ -370,7 +370,7 @@ def profile_widget(self, settings): widget = QtWidgets.QWidget() layout = QtWidgets.QVBoxLayout() title = QtWidgets.QLabel(t("Encoder Settings")) - title.setFont(QtGui.QFont(self.app.font().family(), 9, weight=70)) + # title.setFont(QtGui.QFont(self.app.font().family(), 9, weight=70)) layout.addWidget(title) for k, v in settings.dict().items(): item_1 = QtWidgets.QLabel(" ".join(str(k).split("_")).title()) diff --git a/fastflix/widgets/windows/multiple_files.py b/fastflix/widgets/windows/multiple_files.py index 287ba78d..424e2c52 100644 --- a/fastflix/widgets/windows/multiple_files.py +++ b/fastflix/widgets/windows/multiple_files.py @@ -187,10 +187,29 @@ def __init__(self, app, main, items=None): layout.addLayout(top_bar) + profile_ara = QtWidgets.QHBoxLayout() + + profile_ara.addWidget(QtWidgets.QLabel(t("This profile will be applied to all the selected items:"))) + self.profile_box = QtWidgets.QComboBox() + self.profile_box.setStyleSheet("text-align: center;") + self.profile_box.addItems(self.app.fastflix.config.profiles.keys()) + self.profile_box.view().setFixedWidth(self.profile_box.minimumSizeHint().width() + 50) + self.profile_box.setCurrentText(self.app.fastflix.config.selected_profile) + self.profile_box.currentIndexChanged.connect(self.change_profile) + self.profile_box.setFixedWidth(300) + self.profile_box.setFixedHeight(40) + + profile_ara.addWidget(self.profile_box) + + layout.addLayout(profile_ara) layout.addWidget(self.files_area) layout.addWidget(QtWidgets.QLabel(t("Drag and Drop to reorder"))) self.setLayout(layout) + def change_profile(self): + self.main.widgets.profile_box.setCurrentText(self.profile_box.currentText()) + # self.main.set_profile() + def set_folder_name(self, name): self.base_folder_label.setText(f'{t("Base Folder")}: {name}') diff --git a/pyproject.toml b/pyproject.toml index b6a987f2..f859cb35 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ exclude = ''' [tool.poetry] name = "FastFlix" -version = "5.2.3" +version = "5.3.0" description = "GUI Encoder" license = "MIT" authors = ["Chris Griffith ", ]