diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index dd8877c9..9179b6dd 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -107,6 +107,16 @@ jobs: shell: cmd run: pyinstaller FastFlix_Windows_Installer.spec + - uses: skymatic/code-sign-action@v1 + with: + certificate: '${{ secrets.CODE_CERT_B64 }}' + password: '${{ secrets.CODE_CERT_PASS }}' + certificatesha1: '${{ secrets.CODE_CERT_THUMB }}' + description: 'FastFlix' + timestampUrl: 'http://timestamp.sectigo.com' + folder: 'dist\FastFlix' + recursive: false + - name: Package installer shell: cmd run: | diff --git a/CHANGES b/CHANGES index 0eb21c1b..77195c9e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,12 @@ # Changelog +## Version 5.7.4 + +* Fixing #579 Missing Infos and no Mouse-Over info in Subs-Panel since 5.7 (thanks to GeZorTenPlotZ) +* Fixing #578 Missing code signing to FastFlix exec inside of the installer (thanks to Sam Katakouzinos) +* Fixing #580 No Downmix key error on profile save (thanks to Hankuu) +* Fixing #581 Fastflix could not recognize hevc video containing hdr10plus metadata with recent ffmpeg build (thanks to alpha-0) + ## Version 5.7.3 * Fixing #574 Downmix audio channels not working (thanks to eikixsh) diff --git a/fastflix/encoders/common/audio.py b/fastflix/encoders/common/audio.py index 59052f32..9efc374c 100644 --- a/fastflix/encoders/common/audio.py +++ b/fastflix/encoders/common/audio.py @@ -64,15 +64,16 @@ def build_audio(audio_tracks, audio_file_index=0): command_list.append(f"-c:{track.outdex} copy") elif track.conversion_codec: try: - cl = track.downmix if track.downmix else track.raw_info.channel_layout - except AssertionError: + cl = track.downmix if track.downmix and track.downmix != "No Downmix" else track.raw_info.channel_layout + except (AssertionError, KeyError): cl = "stereo" + downmix = ( f"-ac:{track.outdex} {channel_list[cl]} -filter:{track.outdex} aformat=channel_layouts={cl}" - if track.downmix + if track.downmix and track.downmix != "No Downmix" else "" ) - channel_layout = f'-filter:{track.outdex} aformat=channel_layouts="{track.raw_info.channel_layout}"' + channel_layout = f'-filter:{track.outdex} aformat=channel_layouts="{channel_list[cl]}"' bitrate = "" if track.conversion_codec not in lossless: diff --git a/fastflix/encoders/common/encc_helpers.py b/fastflix/encoders/common/encc_helpers.py index 69eac9f8..eccd6a7b 100644 --- a/fastflix/encoders/common/encc_helpers.py +++ b/fastflix/encoders/common/encc_helpers.py @@ -117,7 +117,9 @@ def build_audio(audio_tracks: list[AudioTrack], audio_streams): if not track.conversion_codec or track.conversion_codec == "none": copies.append(str(audio_id)) elif track.conversion_codec: - downmix = f"--audio-stream {audio_id}?:{track.downmix}" if track.downmix else "" + downmix = ( + f"--audio-stream {audio_id}?:{track.downmix}" if track.downmix and track.downmix != "No Downmix" else "" + ) bitrate = "" if track.conversion_codec not in lossless: if track.conversion_bitrate: diff --git a/fastflix/flix.py b/fastflix/flix.py index d8956981..02d79d34 100644 --- a/fastflix/flix.py +++ b/fastflix/flix.py @@ -603,7 +603,7 @@ def detect_hdr10_plus(app: FastFlixApp, config: Config, **_): "panic", "-c:v", "copy", - "-vbsf", + "-bsf:v", "hevc_mp4toannexb", "-f", "hevc", diff --git a/fastflix/models/encode.py b/fastflix/models/encode.py index 4714e572..095e0ecb 100644 --- a/fastflix/models/encode.py +++ b/fastflix/models/encode.py @@ -36,6 +36,7 @@ class SubtitleTrack(BaseModel): dispositions: dict = Field(default_factory=dict) enabled: bool = True long_name: str = "" + raw_info: Optional[Union[dict, Box]] = None class AttachmentTrack(BaseModel): diff --git a/fastflix/version.py b/fastflix/version.py index 26b6119e..d61958af 100644 --- a/fastflix/version.py +++ b/fastflix/version.py @@ -1,4 +1,4 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -__version__ = "5.7.3" +__version__ = "5.7.4" __author__ = "Chris Griffith" diff --git a/fastflix/widgets/background_tasks.py b/fastflix/widgets/background_tasks.py index 85c9911d..49d3268a 100644 --- a/fastflix/widgets/background_tasks.py +++ b/fastflix/widgets/background_tasks.py @@ -129,7 +129,7 @@ def run(self): f"0:{track}", "-c:v", "copy", - "-vbsf", + "-bsf:v", "hevc_mp4toannexb", "-f", "hevc", diff --git a/fastflix/widgets/panels/subtitle_panel.py b/fastflix/widgets/panels/subtitle_panel.py index 0327a9b1..e0e0f8c8 100644 --- a/fastflix/widgets/panels/subtitle_panel.py +++ b/fastflix/widgets/panels/subtitle_panel.py @@ -100,7 +100,7 @@ def __init__(self, app, parent, index, enabled=True, first=False): # self.widgets.disposition.setCurrentIndex(dispositions.index("forced")) self.setFixedHeight(60) - # self.widgets.title.setToolTip(self.subtitle.to_yaml()) + self.widgets.title.setToolTip(sub_track.raw_info.to_yaml()) self.widgets.burn_in.setToolTip( f"""{t("Overlay this subtitle track onto the video during conversion.")}\n {t("Please make sure seek method is set to exact")}.\n @@ -308,6 +308,7 @@ def new_source(self): audio_end = len(self.app.fastflix.current_video.audio_tracks) for index, track in enumerate(self.app.fastflix.current_video.streams.subtitle): enabled = self.lang_match(track) + subtitle_type = subtitle_types.get(track.get("codec_name", "text"), "text") self.app.fastflix.current_video.subtitle_tracks.append( SubtitleTrack( index=track.index, @@ -315,8 +316,10 @@ def new_source(self): dispositions={k: bool(v) for k, v in track.disposition.items()}, burn_in=False, language=track.get("tags", {}).get("language", ""), - subtitle_type=subtitle_types.get(track.get("codec_name", "text"), "text"), + subtitle_type=subtitle_type, enabled=enabled, + long_name=track.get("codec_long_name", f"{t('Subtitle Type')}:{subtitle_type}"), + raw_info=track, ) ) diff --git a/fastflix/widgets/windows/hdr10plus_inject.py b/fastflix/widgets/windows/hdr10plus_inject.py index 39772e5f..8479ac77 100644 --- a/fastflix/widgets/windows/hdr10plus_inject.py +++ b/fastflix/widgets/windows/hdr10plus_inject.py @@ -135,7 +135,7 @@ def prep_command(self): command = ( f'{self.app.fastflix.config.ffmpeg} -loglevel panic -i "{self.movie_file.text()}" ' - f'-map 0:{self.selected_stream["index"]} -c:v copy -vbsf hevc_mp4toannexb -f hevc - | ' + f'-map 0:{self.selected_stream["index"]} -c:v copy -bsf:v hevc_mp4toannexb -f hevc - | ' f"{self.app.fastflix.config.hdr10plus_parser} inject -i - -j {self.hdr10p_file.text()} -o - | " f'{self.app.fastflix.config.ffmpeg} -loglevel panic -i - -i {self.movie_file.text()} -map 0:0 -c:0 copy -map 1:a -map 1:s -map 1:d -c:1 copy "{self.output_file.text()}"' ) diff --git a/fastflix/widgets/windows/profile_window.py b/fastflix/widgets/windows/profile_window.py index a6c6e645..a42c672a 100644 --- a/fastflix/widgets/windows/profile_window.py +++ b/fastflix/widgets/windows/profile_window.py @@ -154,7 +154,7 @@ def get_settings(self): match_input=match_input_value, conversion=self.convert_to.currentText() if self.convert_to.currentIndex() > 0 else None, bitrate=self.bitrate.currentText(), - downmix=self.downmix.currentText(), + downmix=self.downmix.currentText() if self.downmix.currentIndex() > 0 else None, )