From 164d37d26f76b187ee975b089500aa7d788d0244 Mon Sep 17 00:00:00 2001 From: danielly2020 <60792864+danielly2020@users.noreply.github.com> Date: Sat, 12 Jul 2025 09:43:42 +0800 Subject: [PATCH 1/4] Fixing: can not copy cover and improving subtitle extraction (#679) --- fastflix/ff_queue.py | 2 +- fastflix/widgets/background_tasks.py | 79 +++++++++++++++++++++-- fastflix/widgets/panels/audio_panel.py | 1 + fastflix/widgets/panels/cover_panel.py | 22 +++++-- fastflix/widgets/panels/subtitle_panel.py | 8 ++- 5 files changed, 99 insertions(+), 13 deletions(-) diff --git a/fastflix/ff_queue.py b/fastflix/ff_queue.py index e40130a9..88be2cbf 100644 --- a/fastflix/ff_queue.py +++ b/fastflix/ff_queue.py @@ -107,7 +107,7 @@ def update_conversion_command(vid, old_path: str, new_path: str): if not Path(track["file_path"]).exists(): logger.exception("Could not save cover to queue recovery location, removing cover") continue - new_file = queue_covers / f"{uuid.uuid4().hex}_{track['file_path'].name}" + new_file = queue_covers / f"{uuid.uuid4().hex}_{Path(track['file_path']).name}" try: shutil.copy(track["file_path"], new_file) except OSError: diff --git a/fastflix/widgets/background_tasks.py b/fastflix/widgets/background_tasks.py index 0c9a86ab..c8b60ecb 100644 --- a/fastflix/widgets/background_tasks.py +++ b/fastflix/widgets/background_tasks.py @@ -55,8 +55,38 @@ def __init__(self, app: FastFlixApp, main, index, signal, language): self.language = language def run(self): + subtitle_format = self._get_subtitle_format() + if subtitle_format is None: + self.main.thread_logging_signal.emit( + f"WARNING:{t('Could not determine subtitle format for track')} {self.index}, {t('skipping extraction')}" + ) + self.signal.emit() + return + + if subtitle_format == "srt": + extension = "srt" + output_args = ["-c", "srt", "-f", "srt"] + elif subtitle_format == "ass": + extension = "ass" + output_args = ["-c", "copy"] + elif subtitle_format == "ssa": + extension = "ssa" + output_args = ["-c", "copy"] + elif subtitle_format == "pgs": + extension = "sup" + output_args = ["-c", "copy"] + else: + self.main.thread_logging_signal.emit( + f"WARNING:{t('Subtitle Track')} {self.index} {t('is not in supported format (SRT, ASS, SSA, PGS), skipping extraction')}: {subtitle_format}" + ) + self.signal.emit() + return + + # filename = str( + # Path(self.main.output_video).parent / f"{self.main.output_video}.{self.index}.{self.language}.srt" + # ).replace("\\", "/") filename = str( - Path(self.main.output_video).parent / f"{self.main.output_video}.{self.index}.{self.language}.srt" + Path(self.main.output_video).parent / f"{self.main.output_video}.{self.index}.{self.language}.{extension}" ).replace("\\", "/") self.main.thread_logging_signal.emit(f"INFO:{t('Extracting subtitles to')} {filename}") @@ -69,10 +99,7 @@ def run(self): self.main.input_video, "-map", f"0:s:{self.index}", - "-c", - "srt", - "-f", - "srt", + *output_args, filename, ], stdout=PIPE, @@ -90,6 +117,48 @@ def run(self): self.main.thread_logging_signal.emit(f"INFO:{t('Extracted subtitles successfully')}") self.signal.emit() + def _get_subtitle_format(self): + try: + result = run( + [ + self.app.fastflix.config.ffprobe, + "-v", "error", + "-select_streams", f"s:{self.index}", + "-show_entries", "stream=codec_name", + "-of", "default=noprint_wrappers=1:nokey=1", + self.main.input_video + ], + stdout=PIPE, + stderr=STDOUT, + text=True + ) + + if result.returncode != 0: + self.main.thread_logging_signal.emit( + f"WARNING:{t('Could not probe subtitle track')} {self.index}: {result.stdout}" + ) + return None + + codec_name = result.stdout.strip().lower() + if codec_name in ["subrip", "xsub", "webvtt", "mov_text"]: + return "srt" + elif codec_name == "ass": + return "ass" + elif codec_name == "ssa": + return "ssa" + elif codec_name == "hdmv_pgs_subtitle": + return "pgs" + else: + self.main.thread_logging_signal.emit( + f"WARNING:{t('Subtitle Track')} {self.index} {t('is not in supported format (SRT, ASS, SSA, PGS), skipping extraction')}: {codec_name}" + ) + return None + + except Exception as err: + self.main.thread_logging_signal.emit( + f"WARNING:{t('Error checking subtitle format for track')} {self.index} - {err}" + ) + return None class AudioNoramlize(QtCore.QThread): def __init__(self, app: FastFlixApp, main, audio_type, signal): diff --git a/fastflix/widgets/panels/audio_panel.py b/fastflix/widgets/panels/audio_panel.py index f33a0d0d..c70c7474 100644 --- a/fastflix/widgets/panels/audio_panel.py +++ b/fastflix/widgets/panels/audio_panel.py @@ -253,6 +253,7 @@ def dup_me(self): def del_me(self): self.parent.remove_track(self) del self.app.fastflix.current_video.audio_tracks[self.index] + self.parent.reorder(update=True) def set_outdex(self, outdex): self.app.fastflix.current_video.audio_tracks[self.index].outdex = outdex diff --git a/fastflix/widgets/panels/cover_panel.py b/fastflix/widgets/panels/cover_panel.py index 2d53c67f..3275a474 100644 --- a/fastflix/widgets/panels/cover_panel.py +++ b/fastflix/widgets/panels/cover_panel.py @@ -208,11 +208,23 @@ def get_attachment(self, filename) -> Tuple[Union[Path, None], Union[int, None]] def update_cover_settings(self): if not self.app.fastflix.current_video: return - start_outdex = ( - 1 # Video Track - + len(self.app.fastflix.current_video.audio_tracks) - + len(self.app.fastflix.current_video.subtitle_tracks) - ) + # start_outdex = ( + # 1 # Video Track + # + len(self.app.fastflix.current_video.audio_tracks) + # + len(self.app.fastflix.current_video.subtitle_tracks) + # ) + start_outdex = 1 + + for audio_track in self.app.fastflix.current_video.audio_tracks: + if audio_track.enabled: + audio_track.outdex = start_outdex + start_outdex += 1 + + for subtitle_track in self.app.fastflix.current_video.subtitle_tracks: + if subtitle_track.enabled: + subtitle_track.outdex = start_outdex + start_outdex += 1 + attachments: list[AttachmentTrack] = [] for filename in ("cover", "cover_land", "small_cover", "small_cover_land"): diff --git a/fastflix/widgets/panels/subtitle_panel.py b/fastflix/widgets/panels/subtitle_panel.py index 36b19ca6..0cacea6c 100644 --- a/fastflix/widgets/panels/subtitle_panel.py +++ b/fastflix/widgets/panels/subtitle_panel.py @@ -30,7 +30,7 @@ subtitle_types = { "dvd_subtitle": "picture", - "hdmv_pgs_subtitle": "picture", + "hdmv_pgs_subtitle": "pgs", "dvdsub": "picture", "subrip": "text", "ssa": "text", @@ -130,7 +130,8 @@ def __init__(self, app, parent, index, enabled=True, first=False): self.grid.addWidget(self.widgets.track_number, 0, 1) self.grid.addWidget(self.widgets.title, 0, 2) self.grid.setColumnStretch(2, True) - if sub_track.subtitle_type == "text": + # if sub_track.subtitle_type == "text": + if sub_track.subtitle_type in ["text", "pgs"]: self.grid.addWidget(self.widgets.extract, 0, 3) self.grid.addWidget(self.gif_label, 0, 3) self.gif_label.hide() @@ -376,6 +377,9 @@ def new_source(self): super()._new_source(self.tracks) + # def get_settings(self): + # return # TODO remove + def reload(self, original_tracks): clear_list(self.tracks) From a1bc29141f0c6814957d3d93ad271533ac3838ef Mon Sep 17 00:00:00 2001 From: Chris Griffith Date: Fri, 11 Jul 2025 21:04:48 -0500 Subject: [PATCH 2/4] * Fixing #675 "Default Source Folder" not used when adding Complete Folders (thanks to Krawk) --- CHANGES | 6 +++++ fastflix/version.py | 2 +- fastflix/widgets/background_tasks.py | 25 ++++++++++++-------- fastflix/widgets/panels/cover_panel.py | 6 ++--- fastflix/widgets/panels/subtitle_panel.py | 3 --- fastflix/widgets/settings.py | 27 ++++++++++++++-------- fastflix/widgets/windows/concat.py | 2 +- fastflix/widgets/windows/multiple_files.py | 2 +- 8 files changed, 45 insertions(+), 28 deletions(-) diff --git a/CHANGES b/CHANGES index f2aa525b..d2b2f0d2 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,11 @@ # Changelog +## Version 5.12.4 + +* Fixing #675 "Default Source Folder" not used when adding Complete Folders (thanks to Krawk) +* Fixing #678 Cannot copy the cover (thanks to danielly2020) +* Fixing #679 Subtitle extraction (thanks to danielly2020) + ## Version 5.12.3 * Fixing #673 changing subtitle langauge in the UI did not take effect in the command (thanks to danielly2020) diff --git a/fastflix/version.py b/fastflix/version.py index 6463710f..59da427c 100644 --- a/fastflix/version.py +++ b/fastflix/version.py @@ -1,4 +1,4 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -__version__ = "5.12.3" +__version__ = "5.12.4" __author__ = "Chris Griffith" diff --git a/fastflix/widgets/background_tasks.py b/fastflix/widgets/background_tasks.py index c8b60ecb..75421799 100644 --- a/fastflix/widgets/background_tasks.py +++ b/fastflix/widgets/background_tasks.py @@ -83,7 +83,7 @@ def run(self): return # filename = str( - # Path(self.main.output_video).parent / f"{self.main.output_video}.{self.index}.{self.language}.srt" + # Path(self.main.output_video).parent / f"{self.main.output_video}.{self.index}.{self.language}.srt" # ).replace("\\", "/") filename = str( Path(self.main.output_video).parent / f"{self.main.output_video}.{self.index}.{self.language}.{extension}" @@ -122,23 +122,27 @@ def _get_subtitle_format(self): result = run( [ self.app.fastflix.config.ffprobe, - "-v", "error", - "-select_streams", f"s:{self.index}", - "-show_entries", "stream=codec_name", - "-of", "default=noprint_wrappers=1:nokey=1", - self.main.input_video + "-v", + "error", + "-select_streams", + f"s:{self.index}", + "-show_entries", + "stream=codec_name", + "-of", + "default=noprint_wrappers=1:nokey=1", + self.main.input_video, ], stdout=PIPE, stderr=STDOUT, - text=True + text=True, ) - + if result.returncode != 0: self.main.thread_logging_signal.emit( f"WARNING:{t('Could not probe subtitle track')} {self.index}: {result.stdout}" ) return None - + codec_name = result.stdout.strip().lower() if codec_name in ["subrip", "xsub", "webvtt", "mov_text"]: return "srt" @@ -153,13 +157,14 @@ def _get_subtitle_format(self): f"WARNING:{t('Subtitle Track')} {self.index} {t('is not in supported format (SRT, ASS, SSA, PGS), skipping extraction')}: {codec_name}" ) return None - + except Exception as err: self.main.thread_logging_signal.emit( f"WARNING:{t('Error checking subtitle format for track')} {self.index} - {err}" ) return None + class AudioNoramlize(QtCore.QThread): def __init__(self, app: FastFlixApp, main, audio_type, signal): super().__init__(main) diff --git a/fastflix/widgets/panels/cover_panel.py b/fastflix/widgets/panels/cover_panel.py index 3275a474..240a5ce2 100644 --- a/fastflix/widgets/panels/cover_panel.py +++ b/fastflix/widgets/panels/cover_panel.py @@ -209,9 +209,9 @@ def update_cover_settings(self): if not self.app.fastflix.current_video: return # start_outdex = ( - # 1 # Video Track - # + len(self.app.fastflix.current_video.audio_tracks) - # + len(self.app.fastflix.current_video.subtitle_tracks) + # 1 # Video Track + # + len(self.app.fastflix.current_video.audio_tracks) + # + len(self.app.fastflix.current_video.subtitle_tracks) # ) start_outdex = 1 diff --git a/fastflix/widgets/panels/subtitle_panel.py b/fastflix/widgets/panels/subtitle_panel.py index 0cacea6c..ff814210 100644 --- a/fastflix/widgets/panels/subtitle_panel.py +++ b/fastflix/widgets/panels/subtitle_panel.py @@ -377,9 +377,6 @@ def new_source(self): super()._new_source(self.tracks) - # def get_settings(self): - # return # TODO remove - def reload(self, original_tracks): clear_list(self.tracks) diff --git a/fastflix/widgets/settings.py b/fastflix/widgets/settings.py index 7cb8d14f..4dfd5a47 100644 --- a/fastflix/widgets/settings.py +++ b/fastflix/widgets/settings.py @@ -208,19 +208,25 @@ def __init__(self, app: FastFlixApp, main, *args, **kwargs): self.output_path_line_edit = QtWidgets.QLineEdit() if self.app.fastflix.config.output_directory: self.output_path_line_edit.setText(str(self.app.fastflix.config.output_directory)) - output_label_path_button = QtWidgets.QPushButton(icon=self.style().standardIcon(QtWidgets.QStyle.SP_DirIcon)) - output_label_path_button.clicked.connect(lambda: self.select_output_directory()) + self.output_label_path_button = QtWidgets.QPushButton( + icon=self.style().standardIcon(QtWidgets.QStyle.SP_DirIcon) + ) + self.output_label_path_button.clicked.connect(lambda: self.select_output_directory()) layout.addWidget(output_label, 17, 0) layout.addWidget(self.output_path_line_edit, 17, 1) - layout.addWidget(output_label_path_button, 17, 2) + layout.addWidget(self.output_label_path_button, 17, 2) self.default_output_dir = QtWidgets.QCheckBox(t("Use same output directory as source file")) if not self.app.fastflix.config.output_directory: self.default_output_dir.setChecked(True) self.output_path_line_edit.setDisabled(True) - self.default_output_dir.clicked.connect( - lambda: self.output_path_line_edit.setDisabled(self.output_path_line_edit.isEnabled()) - ) + self.output_label_path_button.setDisabled(True) + + def out_click(): + self.output_path_line_edit.setDisabled(self.output_path_line_edit.isEnabled()) + self.output_label_path_button.setEnabled(self.output_path_line_edit.isEnabled()) + + self.default_output_dir.clicked.connect(out_click) layout.addWidget(self.default_output_dir, 16, 0, 1, 2) # SOURCE DIR @@ -239,10 +245,13 @@ def __init__(self, app: FastFlixApp, main, *args, **kwargs): if not self.app.fastflix.config.source_directory: self.default_source_dir.setChecked(True) self.source_path_line_edit.setDisabled(True) - self.default_source_dir.clicked.connect( - lambda: self.source_path_line_edit.setDisabled(self.source_path_line_edit.isEnabled()) - ) + source_label_path_button.setDisabled(True) + + def in_dir(): + self.source_path_line_edit.setDisabled(self.source_path_line_edit.isEnabled()) + source_label_path_button.setEnabled(self.source_path_line_edit.isEnabled()) + self.default_source_dir.clicked.connect(in_dir) self.sticky_tabs = QtWidgets.QCheckBox(t("Disable Automatic Tab Switching")) self.sticky_tabs.setChecked(self.app.fastflix.config.sticky_tabs) diff --git a/fastflix/widgets/windows/concat.py b/fastflix/widgets/windows/concat.py index 2528d3f4..0762295a 100644 --- a/fastflix/widgets/windows/concat.py +++ b/fastflix/widgets/windows/concat.py @@ -126,7 +126,7 @@ def __init__(self, app, main, items=None): self.app = app self.main = main self.setStyleSheet("font-size: 14px") - self.folder_name = str(Path.home()) + self.folder_name = str(self.app.fastflix.config.source_directory) or str(Path.home()) self.setWindowTitle(t("Concatenation Builder")) self.concat_area = ConcatScroll(self) diff --git a/fastflix/widgets/windows/multiple_files.py b/fastflix/widgets/windows/multiple_files.py index 6b689683..8a207ba8 100644 --- a/fastflix/widgets/windows/multiple_files.py +++ b/fastflix/widgets/windows/multiple_files.py @@ -156,7 +156,7 @@ def __init__(self, app, main, items=None): self.app = app self.main = main self.setStyleSheet("font-size: 14px") - self.folder_name = str(Path.home()) + self.folder_name = str(self.app.fastflix.config.source_directory) or str(Path.home()) self.setWindowTitle(t("Multiple Files")) self.files_area = MultipleFilesScroll(self) From 75382714f0858b170ff48c70ebf831fcf7e2eac2 Mon Sep 17 00:00:00 2001 From: Chris Griffith Date: Sat, 12 Jul 2025 17:24:04 -0500 Subject: [PATCH 3/4] * Fixing adding subtitle track would fail if video has a title (thanks to The_Donn) --- CHANGES | 2 ++ fastflix/data/languages.yaml | 22 +++++++++++++++++++++ fastflix/encoders/modify/command_builder.py | 17 +++------------- fastflix/encoders/modify/settings_panel.py | 2 ++ 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/CHANGES b/CHANGES index d2b2f0d2..a448c6c3 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,8 @@ * Fixing #675 "Default Source Folder" not used when adding Complete Folders (thanks to Krawk) * Fixing #678 Cannot copy the cover (thanks to danielly2020) * Fixing #679 Subtitle extraction (thanks to danielly2020) +* Fixing adding subtitle track would fail if video has a title (thanks to The_Donn) + ## Version 5.12.3 diff --git a/fastflix/data/languages.yaml b/fastflix/data/languages.yaml index 6be27dae..0b82d89f 100644 --- a/fastflix/data/languages.yaml +++ b/fastflix/data/languages.yaml @@ -11101,3 +11101,25 @@ Could not extract subtitle track: ukr: Не вдалося витягти доріжку субтитрів kor: 자막 트랙을 추출할 수 없습니다. ron: Nu s-a putut extrage pista de subtitrare +Select Subtitle Track: + eng: Select Subtitle Track +Subtitle Track: + eng: Subtitle Track +"Subtitle Files (*.srt *.ass *.vtt *.ssa);;All Files (*)": + eng: "Subtitle Files (*.srt *.ass *.vtt *.ssa);;All Files (*)" +Select Audio Track: + eng: Select Audio Track +"Audio Files (*.mp3 *.aac *.wav *.flac);;All Files (*)": + eng: "Audio Files (*.mp3 *.aac *.wav *.flac);;All Files (*)" +"is not in supported format (SRT, ASS, SSA, PGS), skipping extraction": + eng: is not in supported format (SRT, ASS, SSA, PGS), skipping extraction +Could not determine subtitle format for track: + eng: Could not determine subtitle format for track +skipping extraction: + eng: skipping extraction +Could not probe subtitle track: + eng: Could not probe subtitle track +Error checking subtitle format for track: + eng: Error checking subtitle format for track +"Note: start and end time will be ignored": + eng: "Note: start and end time will be ignored" diff --git a/fastflix/encoders/modify/command_builder.py b/fastflix/encoders/modify/command_builder.py index a21d4a45..3c8d4b19 100644 --- a/fastflix/encoders/modify/command_builder.py +++ b/fastflix/encoders/modify/command_builder.py @@ -6,18 +6,11 @@ def build(fastflix: FastFlix): beginning, ending, output_fps = generate_all(fastflix, "copy", disable_filters=True, audio=False, subs=False) - start_time = fastflix.current_video.video_settings.start_time - fast_seek = fastflix.current_video.video_settings.fast_seek - end_time = fastflix.current_video.video_settings.end_time video_title = fastflix.current_video.video_settings.video_title video_track_title = fastflix.current_video.video_settings.video_track_title ffmpeg = fastflix.config.ffmpeg source = fastflix.current_video.source - time_settings = f"{f'-ss {start_time}' if start_time else ''} {f'-to {end_time}' if end_time else ''} " - time_one = time_settings if fast_seek else "" - time_two = time_settings if not fast_seek else "" - if video_title: video_title = video_title.replace('"', '\\"') title = f'-metadata title="{video_title}"' if video_title else "" @@ -31,11 +24,7 @@ def build(fastflix: FastFlix): [ f'"{ffmpeg}"', "-y", - time_one, f'-i "{source}"', - time_two, - title, - f"{track_title if video_track_title else ''}", " ", # Leave space after commands ] ) @@ -48,7 +37,7 @@ def build(fastflix: FastFlix): subs_path_clean = clean_file_string(subs) return [ Command( - command=f'{beginning} -i "{audio_path_clean}" -i "{subs_path_clean}" -map 0 -map 1:a -map 2:s -c copy {fastflix.current_video.video_settings.video_encoder_settings.extra} {ending}', + command=f'{beginning} -i "{audio_path_clean}" -i "{subs_path_clean}" -map 0 -map 1:a -map 2:s {title} {track_title if video_track_title else ""} -c copy {fastflix.current_video.video_settings.video_encoder_settings.extra} {ending}', name="Add audio and subtitle track", exe="ffmpeg", ) @@ -58,7 +47,7 @@ def build(fastflix: FastFlix): audio_path_clean = clean_file_string(audio) return [ Command( - command=f'{beginning} -i "{audio_path_clean}" -map 0 -map 1:a -c copy {fastflix.current_video.video_settings.video_encoder_settings.extra} {ending}', + command=f'{beginning} -i "{audio_path_clean}" -map 0 -map 1:a {title} {track_title if video_track_title else ""} -c copy {fastflix.current_video.video_settings.video_encoder_settings.extra} {ending}', name="Add audio track", exe="ffmpeg", ) @@ -68,7 +57,7 @@ def build(fastflix: FastFlix): subs_path_clean = clean_file_string(subs) return [ Command( - command=f'{beginning} -i "{subs_path_clean}" -map 0 -map 1:s -c copy {fastflix.current_video.video_settings.video_encoder_settings.extra} {ending}', + command=f'{beginning} -i "{subs_path_clean}" -map 0 -map 1:s {title} {track_title if video_track_title else ""} -c copy {fastflix.current_video.video_settings.video_encoder_settings.extra} {ending}', name="Add subtitle track", exe="ffmpeg", ) diff --git a/fastflix/encoders/modify/settings_panel.py b/fastflix/encoders/modify/settings_panel.py index aceafa62..a25d644c 100644 --- a/fastflix/encoders/modify/settings_panel.py +++ b/fastflix/encoders/modify/settings_panel.py @@ -55,6 +55,8 @@ def __init__(self, parent, main, app: FastFlixApp): grid.addWidget(add_sub_track, 4, 0, 1, 1) grid.addWidget(self.add_sub_track_file_path, 4, 1, 1, 2) + grid.addWidget(QtWidgets.QLabel(t("Note: start and end time will be ignored")), 5, 0) + grid.addWidget(QtWidgets.QWidget(), 6, 0, 6, 1) grid.addLayout(self._add_custom(disable_both_passes=True), 11, 0, 1, 6) self.setLayout(grid) From b0367de41ae0024c91c976d8a3d0f17f12b00132 Mon Sep 17 00:00:00 2001 From: Chris Griffith Date: Sat, 12 Jul 2025 17:32:41 -0500 Subject: [PATCH 4/4] update languages --- fastflix/data/languages.yaml | 163 +++++++++++++++++++++++++++++++++-- 1 file changed, 156 insertions(+), 7 deletions(-) diff --git a/fastflix/data/languages.yaml b/fastflix/data/languages.yaml index 0b82d89f..11e4a6db 100644 --- a/fastflix/data/languages.yaml +++ b/fastflix/data/languages.yaml @@ -11103,23 +11103,172 @@ Could not extract subtitle track: ron: Nu s-a putut extrage pista de subtitrare Select Subtitle Track: eng: Select Subtitle Track + deu: Untertitelspur auswählen + fra: Sélectionner la piste des sous-titres + ita: Selezionare la traccia dei sottotitoli + spa: Seleccionar pista de subtítulos + jpn: 字幕トラックを選択 + rus: Выберите дорожку субтитров + por: Selecionar a faixa de legendas + swe: Välj undertextspår + pol: Wybór ścieżki napisów + chs: 选择字幕轨道 + ukr: Виберіть доріжку субтитрів + kor: 자막 트랙 선택 + ron: Selectați pista de subtitrare Subtitle Track: eng: Subtitle Track -"Subtitle Files (*.srt *.ass *.vtt *.ssa);;All Files (*)": - eng: "Subtitle Files (*.srt *.ass *.vtt *.ssa);;All Files (*)" + deu: Untertitel Spur + fra: Piste de sous-titres + ita: Traccia dei sottotitoli + spa: Pista de subtítulos + jpn: 字幕トラック + rus: Дорожка субтитров + por: Faixa de legendas + swe: Spår för undertexter + pol: Ścieżka napisów + chs: 字幕轨道 + ukr: Доріжка з субтитрами + kor: 자막 트랙 + ron: Track subtitrare +Subtitle Files (*.srt *.ass *.vtt *.ssa);;All Files (*): + eng: Subtitle Files (*.srt *.ass *.vtt *.ssa);;All Files (*) + deu: Untertiteldateien (*.srt *.ass *.vtt *.ssa);;Alle Dateien (*) + fra: Fichiers de sous-titres (*.srt *.ass *.vtt *.ssa);;Tous les fichiers (*) + ita: File dei sottotitoli (*.srt *.ass *.vtt *.ssa);;Tutti i file (*) + spa: Archivos de subtítulos (*.srt *.ass *.vtt *.ssa);;Todos los archivos (*) + jpn: 字幕ファイル (*.srt *.ass *.vtt *.ssa);;すべてのファイル (*) + rus: Файлы субтитров (*.srt *.ass *.vtt *.ssa);;Все файлы (*) + por: Ficheiros de legendas (*.srt *.ass *.vtt *.ssa);;Todos os ficheiros (*) + swe: Undertextfiler (*.srt *.ass *.vtt *.ssa);;Alla filer (*) + pol: Pliki napisów (*.srt *.ass *.vtt *.ssa);;Wszystkie pliki (*) + chs: 字幕文件 (*.srt *.ass *.vtt *.ssa);;All Files (*) + ukr: Файли субтитрів (*.srt *.ass *.vtt *.ssa);;Всі файли (*) + kor: 자막 파일 (*.srt *.ass *.vtt *.ssa);;모든 파일 (*) + ron: Fișiere subtitrare (*.srt *.ass *.vtt *.ssa);;Toate fișierele (*) Select Audio Track: eng: Select Audio Track -"Audio Files (*.mp3 *.aac *.wav *.flac);;All Files (*)": - eng: "Audio Files (*.mp3 *.aac *.wav *.flac);;All Files (*)" -"is not in supported format (SRT, ASS, SSA, PGS), skipping extraction": + deu: Audiospur auswählen + fra: Sélectionner la piste audio + ita: Selezionare la traccia audio + spa: Seleccionar pista de audio + jpn: オーディオトラックを選択 + rus: Выберите аудиодорожку + por: Selecionar faixa de áudio + swe: Välj ljudspår + pol: Wybierz ścieżkę audio + chs: 选择音轨 + ukr: Виберіть аудіодоріжку + kor: 오디오 트랙 선택 + ron: Selectați pista audio +Audio Files (*.mp3 *.aac *.wav *.flac);;All Files (*): + eng: Audio Files (*.mp3 *.aac *.wav *.flac);;All Files (*) + deu: Audio-Dateien (*.mp3 *.aac *.wav *.flac);;Alle Dateien (*) + fra: Fichiers audio (*.mp3 *.aac *.wav *.flac);;Tous les fichiers (*) + ita: File audio (*.mp3 *.aac *.wav *.flac);;Tutti i file (*) + spa: Archivos de audio (*.mp3 *.aac *.wav *.flac);;Todos los archivos (*) + jpn: オーディオファイル (*.mp3 *.aac *.wav *.flac);;すべてのファイル (*) + rus: Аудиофайлы (*.mp3 *.aac *.wav *.flac);;Все файлы (*) + por: Ficheiros de áudio (*.mp3 *.aac *.wav *.flac);;Todos os ficheiros (*) + swe: Ljudfiler (*.mp3 *.aac *.wav *.flac);;Alla filer (*) + pol: Pliki audio (*.mp3 *.aac *.wav *.flac);;Wszystkie pliki (*) + chs: 音频文件 (*.mp3 *.aac *.wav *.flac);;All Files (*) + ukr: Аудіофайли (*.mp3 *.aac *.wav *.flac);;Всі файли (*) + kor: 오디오 파일(*.mp3 *.aac *.wav *.flac);;모든 파일(*) + ron: Fișiere audio (*.mp3 *.aac *.wav *.flac);;Toate fișierele (*) +is not in supported format (SRT, ASS, SSA, PGS), skipping extraction: eng: is not in supported format (SRT, ASS, SSA, PGS), skipping extraction + deu: nicht im unterstützten Format ist (SRT, ASS, SSA, PGS), wird die + Extraktion übersprungen + fra: n'est pas dans un format supporté (SRT, ASS, SSA, PGS), l'extraction est + ignorée. + ita: non è in un formato supportato (SRT, ASS, SSA, PGS), si salta + l'estrazione. + spa: no está en un formato compatible (SRT, ASS, SSA, PGS), se omite la + extracción + jpn: がサポートされているフォーマット(SRT、ASS、SSA、PGS)でない場合、抽出をスキップする。 + rus: не в поддерживаемом формате (SRT, ASS, SSA, PGS), пропуск извлечения + por: não está num formato suportado (SRT, ASS, SSA, PGS), saltando a extração + swe: inte är i ett format som stöds (SRT, ASS, SSA, PGS), hoppa över + extraktionen + pol: nie jest w obsługiwanym formacie (SRT, ASS, SSA, PGS), pomijanie + ekstrakcji + chs: 不支持的格式(SRT、ASS、SSA、PGS),跳过提取 + ukr: не у підтримуваному форматі (SRT, ASS, SSA, PGS), пропускається вилучення + kor: 가 지원되지 않는 형식(SRT, ASS, SSA, PGS)이므로 추출 건너뛰기 + ron: nu este în format acceptat (SRT, ASS, SSA, PGS), extragerea este ignorată Could not determine subtitle format for track: eng: Could not determine subtitle format for track + deu: Das Untertitelformat für die Spur konnte nicht ermittelt werden + fra: Impossible de déterminer le format des sous-titres pour la piste + ita: Impossibile determinare il formato dei sottotitoli per la traccia + spa: No se ha podido determinar el formato de subtítulos de la pista + jpn: トラックの字幕フォーマットを決定できませんでした + rus: Не удалось определить формат субтитров для дорожки + por: Não foi possível determinar o formato das legendas para a faixa + swe: Kunde inte fastställa undertextformat för spår + pol: Nie można określić formatu napisów dla ścieżki + chs: 无法确定轨道的字幕格式 + ukr: Не вдалося визначити формат субтитрів для доріжки + kor: 트랙의 자막 형식을 결정할 수 없습니다. + ron: Nu s-a putut determina formatul subtitrărilor pentru pistă skipping extraction: eng: skipping extraction + deu: Überspringen der Extraktion + fra: Sauter l'extraction + ita: saltare l'estrazione + spa: omitir la extracción + jpn: スキップ抽出 + rus: пропуск добычи + por: saltar a extração + swe: hoppa över extraktion + pol: pomijanie ekstrakcji + chs: 跳转提取 + ukr: пропуск видобутку + kor: 추출 건너뛰기 + ron: omiterea extracției Could not probe subtitle track: eng: Could not probe subtitle track + deu: Untertitelspur konnte nicht geprüft werden + fra: Impossible de sonder la piste de sous-titres + ita: Impossibile sondare la traccia dei sottotitoli + spa: No se ha podido sondear la pista de subtítulos + jpn: 字幕トラックをプローブできませんでした + rus: Не удалось обнаружить дорожку субтитров + por: Não foi possível sondar a faixa de legendas + swe: Kunde inte undersöka undertextspåret + pol: Nie można sondować ścieżki napisów + chs: 无法探测字幕轨道 + ukr: Не вдалося дослідити доріжку субтитрів + kor: 자막 트랙을 조사할 수 없습니다. + ron: Nu s-a putut sonda pista de subtitrare Error checking subtitle format for track: eng: Error checking subtitle format for track -"Note: start and end time will be ignored": - eng: "Note: start and end time will be ignored" + deu: Fehler bei der Überprüfung des Untertitelformats für die Spur + fra: Erreur de vérification du format des sous-titres pour la piste + ita: Errore nella verifica del formato dei sottotitoli per la traccia + spa: Error al comprobar el formato de subtítulos de la pista + jpn: トラックの字幕フォーマットのチェックエラー + rus: Ошибка при проверке формата субтитров для дорожки + por: Erro ao verificar o formato da legenda para a faixa + swe: Fel vid kontroll av undertextformat för spår + pol: Błąd sprawdzania formatu napisów dla ścieżki + chs: 错误检查轨道的字幕格式 + ukr: Помилка перевірки формату субтитрів для доріжки + kor: 트랙의 자막 형식 확인 중 오류 발생 + ron: Eroare la verificarea formatului subtitrărilor pentru pistă +'Note: start and end time will be ignored': + eng: 'Note: start and end time will be ignored' + deu: 'Hinweis: Start- und Endzeit werden ignoriert.' + fra: 'Note : les heures de début et de fin seront ignorées.' + ita: "Nota: l'ora di inizio e di fine viene ignorata." + spa: 'Nota: se ignorarán las horas de inicio y fin.' + jpn: 注:開始時間と終了時間は無視されます + rus: 'Примечание: время начала и окончания будет игнорироваться' + por: 'Nota: as horas de início e de fim serão ignoradas' + swe: 'Obs: start- och sluttid kommer att ignoreras' + pol: 'Uwaga: czas rozpoczęcia i zakończenia będzie ignorowany.' + chs: 注意:开始和结束时间将被忽略 + ukr: 'Примітка: час початку та закінчення ігнорується' + kor: '참고: 시작 및 종료 시간은 무시됩니다.' + ron: 'Notă: ora de început și de sfârșit vor fi ignorate'