From 72509eba6a8397bbd71ce838c8295acabc839727 Mon Sep 17 00:00:00 2001 From: Daniel Kamil Kozar Date: Mon, 3 Jan 2022 00:18:51 +0100 Subject: [PATCH] Use .ec3 as the extension for Dolby Digital Plus (E-AC3) files (#534) Used this chance to finally rework file dialog filter string creation : the names of the extension groups are now clearly split so they appear separate in translation files. Also fixed a bug in demux code - the AC3 would have an .ac3 extension regardless of the actual format due to the if for A_AC3 occurring twice. Fixes #533 . --- tsMuxer/singleFileMuxer.cpp | 36 ++-- tsMuxerGUI/translations/tsmuxergui_en.ts | 206 ++++++++++++++++------ tsMuxerGUI/translations/tsmuxergui_fr.ts | 212 ++++++++++++++++------- tsMuxerGUI/translations/tsmuxergui_ru.ts | 212 ++++++++++++++++------- tsMuxerGUI/translations/tsmuxergui_zh.ts | 212 ++++++++++++++++------- tsMuxerGUI/tsmuxerwindow.cpp | 87 +++++++--- 6 files changed, 682 insertions(+), 283 deletions(-) diff --git a/tsMuxer/singleFileMuxer.cpp b/tsMuxer/singleFileMuxer.cpp index 7540553..5e0acd9 100644 --- a/tsMuxer/singleFileMuxer.cpp +++ b/tsMuxer/singleFileMuxer.cpp @@ -39,36 +39,41 @@ void SingleFileMuxer::intAddStream(const std::string& streamName, const std::str const map& params, AbstractStreamReader* codecReader) { codecReader->setDemuxMode(true); - uint8_t descrBuffer[188]; - int descriptorLen = codecReader->getTSDescriptor(descrBuffer, true, true); string fileExt = "track"; - if (codecName == "A_AC3") - fileExt = ".ac3"; - else if (codecName == "A_AAC") + + // this call seemingly does nothing, but it actually makes some + // StreamReaders refresh/set their private variables, enabling proper + // codec->extension mapping in here. don't remove it. + uint8_t descrBuffer[188]; + codecReader->getTSDescriptor(descrBuffer, true, true); + + if (codecName == "A_AAC") + { fileExt = ".aac"; + } else if (codecName == "A_MP3") { - MpegAudioStreamReader* mp3Reader = (MpegAudioStreamReader*)codecReader; + const auto mp3Reader = static_cast(codecReader); if (mp3Reader->getLayer() == 3) fileExt = ".mp3"; else fileExt = ".mpa"; } else if (codecName == "A_DTS") + { fileExt = ".dts"; + } else if (codecName == "A_LPCM") { fileExt = ".wav"; - LPCMStreamReader* lpcmReader = (LPCMStreamReader*)codecReader; - // lpcmReader->setDemuxMode(true); } else if (codecName == "A_AC3") { - AC3StreamReader* ac3Reader = (AC3StreamReader*)codecReader; + const auto ac3Reader = static_cast(codecReader); if (ac3Reader->isTrueHD() && !ac3Reader->getDownconvertToAC3()) fileExt = ".trueHD"; else if (ac3Reader->isEAC3()) - fileExt = ".ddp"; + fileExt = ".ec3"; else fileExt = ".ac3"; } @@ -79,14 +84,10 @@ void SingleFileMuxer::intAddStream(const std::string& streamName, const std::str else if (codecName == "S_HDMV/PGS") { fileExt = ".sup"; - PGSStreamReader* pgsReader = (PGSStreamReader*)codecReader; - // pgsReader->setDemuxMode(true); } else if (codecName == "S_TEXT/UTF8") { fileExt = ".sup"; - SRTStreamReader* srtReader = (SRTStreamReader*)codecReader; - // srtReader->setDemuxMode(true); } else if (codecName[0] == 'V') { @@ -116,13 +117,6 @@ void SingleFileMuxer::intAddStream(const std::string& streamName, const std::str } } - /* - if (codecName[0] == 'A') { - // Used for "more correct" switching between the boundaries of Blu-Ray disc files - ((SimplePacketizerReader*) codecReader)->setMPLSInfo(m_mplsParser.m_playItems); - } - */ - vector fileList = extractFileList(streamName); string fileName; if (fileList.size() < 3) diff --git a/tsMuxerGUI/translations/tsmuxergui_en.ts b/tsMuxerGUI/translations/tsmuxergui_en.ts index a23d467..f2f3511 100644 --- a/tsMuxerGUI/translations/tsmuxergui_en.ts +++ b/tsMuxerGUI/translations/tsmuxergui_en.ts @@ -4,22 +4,22 @@ FontSettingsTableModel - + Name: - + Size: - + Color: - + Options: @@ -129,7 +129,7 @@ - + General track options @@ -195,7 +195,7 @@ - + Downconvert HD audio @@ -221,7 +221,7 @@ - + Demux options @@ -734,7 +734,7 @@ - + Demux @@ -745,7 +745,7 @@ - + File name @@ -761,7 +761,7 @@ - + Sta&rt muxing @@ -771,196 +771,288 @@ - - All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (advanced audio coding) (*.aac);;AVC/MVC/H.264 elementary stream (*.avc *.mvc *.264 *.h264);;HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;Digital Theater System (*.dts);;DTS-HD Master Audio (*.dtshd);;Mpeg video elementary stream (*.mpv *.m1v *.m2v);;Mpeg audio elementary stream (*.mpa);;Transport Stream (*.ts);;BDAV Transport Stream (*.m2ts *.mts *.ssif);;Program Stream (*.mpg *.mpeg *.vob *.evo);;Matroska audio/video files (*.mkv *.mka *.mks);;MP4 audio/video files (*.mp4 *.m4a *.m4v);;Quick time audio/video files (*.mov);;Blu-ray play list (*.mpls *.mpl);;Blu-ray PGS subtitles (*.sup);;Text subtitles (*.srt);;WAVE - Uncompressed PCM audio (*.wav *.w64);;RAW LPCM Stream (*.pcm);;All files (*.*) + + All files - - Transport stream (*.ts);;all files (*.*) - - - - - BDAV Transport Stream (*.m2ts);;all files (*.*) + + AC3/E-AC3 - Disk image (*.iso);;all files (*.*) + AAC (advanced audio coding) - + + AVC/MVC/H.264 elementary stream + + + + + HEVC (High Efficiency Video Codec) + + + + + Digital Theater System + + + + + DTS-HD Master Audio + + + + + Mpeg video elementary stream + + + + + Mpeg audio elementary stream + + + + + + Transport Stream + + + + + + BDAV Transport Stream + + + + + Program Stream + + + + + Matroska audio/video files + + + + + MP4 audio/video files + + + + + QuickTime audio/video files + + + + + Blu-ray play list + + + + + Blu-ray PGS subtitles + + + + + Text subtitles + + + + + WAVE - Uncompressed PCM audio + + + + + RAW LPCM Stream + + + + + All supported media files + + + + + Disk image + + + + Not supported - - + + Unsupported format - + Can't detect stream type. File name: "%1" - + Add media files - + File already exists - + File "%1" already exists - + Downconvert DTS-HD to DTS - + Downconvert TRUE-HD to AC3 - + Downconvert E-AC3 to AC3 - + Unsupported format or all tracks are not recognized. File name: "%1" - + Track %1 was not recognized and ignored. File name: "%2" - + Mux - + tsMuxeR error - + tsMuxeR not found! - + Can't execute tsMuxeR! - - + + No track selected - + Append media files - + Invalid file extension - + Appended file must have same file extension. - + Sta&rt demuxing - + Folder - + Select file for muxing - - + + Invalid file name - + The output file "%1" has invalid extension. Please, change file extension to ".m2ts" - + The output file "%1" has invalid extension. Please, change file extension to ".iso" - + file Used in expressions "Overwrite existing %1" and "The output %1 already exists". - + directory - + Overwrite existing %1? - + The output %1 "%2" already exists. Do you want to overwrite it? - + Muxing in progress - + Demuxing in progress - + tsMuxeR project file (*.meta);;All files (*.*) - + Can't create temporary meta file - + Can't create temporary meta file "%1" diff --git a/tsMuxerGUI/translations/tsmuxergui_fr.ts b/tsMuxerGUI/translations/tsmuxergui_fr.ts index e2e1b0b..024d1c5 100644 --- a/tsMuxerGUI/translations/tsmuxergui_fr.ts +++ b/tsMuxerGUI/translations/tsmuxergui_fr.ts @@ -4,22 +4,22 @@ FontSettingsTableModel - + Name: Nom : - + Size: Taille : - + Color: Couleur : - + Options: Options : @@ -129,7 +129,7 @@ - + General track options Options générales de la piste @@ -195,7 +195,7 @@ - + Downconvert HD audio Supprimer les données HD de l'audio @@ -221,7 +221,7 @@ - + Demux options Options de démuxage @@ -734,7 +734,7 @@ - + Demux Démuxer @@ -745,7 +745,7 @@ - + File name Nom du fichier @@ -761,7 +761,7 @@ - + Sta&rt muxing &Démarrer le muxage @@ -771,196 +771,288 @@ Sauvegarder le fichier Meta - - All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (advanced audio coding) (*.aac);;AVC/MVC/H.264 elementary stream (*.avc *.mvc *.264 *.h264);;HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;Digital Theater System (*.dts);;DTS-HD Master Audio (*.dtshd);;Mpeg video elementary stream (*.mpv *.m1v *.m2v);;Mpeg audio elementary stream (*.mpa);;Transport Stream (*.ts);;BDAV Transport Stream (*.m2ts *.mts *.ssif);;Program Stream (*.mpg *.mpeg *.vob *.evo);;Matroska audio/video files (*.mkv *.mka *.mks);;MP4 audio/video files (*.mp4 *.m4a *.m4v);;Quick time audio/video files (*.mov);;Blu-ray play list (*.mpls *.mpl);;Blu-ray PGS subtitles (*.sup);;Text subtitles (*.srt);;WAVE - Uncompressed PCM audio (*.wav *.w64);;RAW LPCM Stream (*.pcm);;All files (*.*) - Tous les fichiers média pris en charge (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (advanced audio coding) (*.aac);;AVC/MVC/H.264 flux élémentaire (*.avc *.mvc *.264 *.h264);;HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;Digital Theater System (*.dts);;DTS-HD Master Audio (*.dtshd);;Flux vidéo élémentaire Mpeg (*.mpv *.m1v *.m2v);;Flux audio élémentaire Mpeg (*.mpa);;Transport Stream (*.ts);;BDAV Transport Stream (*.m2ts *.mts *.ssif);;Program Stream (*.mpg *.mpeg *.vob *.evo);;Fichiers audio/vidéo Matroska (*.mkv *.mka *.mks);;Fichiers audio/vidéo MP4 (*.mp4 *.m4a *.m4v);;Fichiers audio/vidéo QuickTime (*.mov);;Liste de lecture Blu-Ray (*.mpls *.mpl);;Sous-titres PGS de Blu-ray (*.sup);;Sous-titres à base de texte (*.srt);;WAVE - Audio PCM non compressé (*.wav *.w64);;Flux LPCM RAW (*.pcm);;Tous les fichiers (*.*) + + All files + Tous les fichiers - - Transport stream (*.ts);;all files (*.*) - Transport stream (*.ts);;Tous les fichiers (*.*) - - - - BDAV Transport Stream (*.m2ts);;all files (*.*) - BDAV Transport Stream (*.m2ts);;Tous les fichiers (*.*) + + AC3/E-AC3 + AC3/E-AC3 - Disk image (*.iso);;all files (*.*) - Image disque (*.iso);; Tous les fichiers (*.*) + AAC (advanced audio coding) + AAC (advanced audio coding) - + + AVC/MVC/H.264 elementary stream + AVC/MVC/H.264 flux élémentaire + + + + HEVC (High Efficiency Video Codec) + HEVC (High Efficiency Video Codec) + + + + Digital Theater System + Digital Theater System + + + + DTS-HD Master Audio + DTS-HD Master Audio + + + + Mpeg video elementary stream + Flux vidéo élémentaire Mpeg + + + + Mpeg audio elementary stream + Flux audio élémentaire Mpeg + + + + + Transport Stream + Transport Stream + + + + + BDAV Transport Stream + BDAV Transport Stream + + + + Program Stream + Program Stream + + + + Matroska audio/video files + Fichiers audio/vidéo Matroska + + + + MP4 audio/video files + Fichiers audio/vidéo MP4 + + + + QuickTime audio/video files + Fichiers audio/vidéo QuickTime + + + + Blu-ray play list + Liste de lecture Blu-Ray + + + + Blu-ray PGS subtitles + Sous-titres PGS de Blu-ray + + + + Text subtitles + Sous-titres à base de texte + + + + WAVE - Uncompressed PCM audio + WAVE - Audio PCM non compressé + + + + RAW LPCM Stream + Flux LPCM RAW + + + + All supported media files + Tous les fichiers média pris en charge + + + + Disk image + Image disque + + + Not supported Non pris en charge - - + + Unsupported format Format non pris en charge - + Can't detect stream type. File name: "%1" Impossible de déterminer le type de flux pour le fichier : "%1" - + Add media files Ajouter un fichiers médias - + File already exists Le fichier existe déjà - + File "%1" already exists Le fichier "%1" existe déjà - + Downconvert DTS-HD to DTS Réduire le DTS-HD en DTS - + Downconvert TRUE-HD to AC3 Réduire le TRUE-HD en AC3 - + Downconvert E-AC3 to AC3 Réduire le E-AC3 en AC3 - + Unsupported format or all tracks are not recognized. File name: "%1" Format non pris en charge ou aucune piste n'a été reconnue pour le fichier "%1" - + Track %1 was not recognized and ignored. File name: "%2" La piste %1 n'a pas été reconnue et a été ignorée pour le fichier "%2" - + Mux Muxer - + tsMuxeR error Erreur de tsMuxeR - + tsMuxeR not found! tsMuxer introuvable ! - + Can't execute tsMuxeR! Impossible d'exécuter tsMuxer ! - - + + No track selected Aucune piste sélectionnée - + Append media files Concaténer un fichiers médias - + Invalid file extension Extension de fichier non valide - + Appended file must have same file extension. Le fichier concaténé doit avoir la même extension de fichier. - + Sta&rt demuxing Déma&rrer le démuxage - + Folder Dossier - + Select file for muxing Sélectionner un fichier pour le muxage - - + + Invalid file name Nom de fichier non valide - + The output file "%1" has invalid extension. Please, change file extension to ".m2ts" Le fichier de sortie "%1"' n'a pas une extension valide. Veuillez changer l'extension du fichier en ".m2ts" - + The output file "%1" has invalid extension. Please, change file extension to ".iso" Le fichier de sortie "%1"' n'a pas une extension valide. Veuillez changer l'extension du fichier en ".iso" - + file Used in expressions "Overwrite existing %1" and "The output %1 already exists". fichier - + directory dossier - + Overwrite existing %1? Écraser %1 qui existe déjà ? - + The output %1 "%2" already exists. Do you want to overwrite it? La sortie %1 "%2" existe déjà. Souhaitez-vous l'écraser ? - + Muxing in progress Muxage en cours - + Demuxing in progress Démuxage en cours - + tsMuxeR project file (*.meta);;All files (*.*) Fichier de projet tsMuxeR (*.meta);;Tous les fichiers (*.*) - + Can't create temporary meta file Impossible de créer le fichier Meta temporaire - + Can't create temporary meta file "%1" Impossible de créer le fichier Meta temporaire "%1" diff --git a/tsMuxerGUI/translations/tsmuxergui_ru.ts b/tsMuxerGUI/translations/tsmuxergui_ru.ts index 17667e6..bb7e09f 100644 --- a/tsMuxerGUI/translations/tsmuxergui_ru.ts +++ b/tsMuxerGUI/translations/tsmuxergui_ru.ts @@ -4,22 +4,22 @@ FontSettingsTableModel - + Name: Имя: - + Size: Размер: - + Color: Цвет: - + Options: Параметры: @@ -129,7 +129,7 @@ - + General track options Общие параметры дорожки @@ -195,7 +195,7 @@ - + Downconvert HD audio Упростить HD звук @@ -221,7 +221,7 @@ - + Demux options Параметры записи дорожек @@ -734,7 +734,7 @@ - + Demux Демукс @@ -745,7 +745,7 @@ - + File name Имя Файла @@ -761,7 +761,7 @@ - + Sta&rt muxing Ста&рт муксинга @@ -771,197 +771,289 @@ Сохранить проект - - All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (advanced audio coding) (*.aac);;AVC/MVC/H.264 elementary stream (*.avc *.mvc *.264 *.h264);;HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;Digital Theater System (*.dts);;DTS-HD Master Audio (*.dtshd);;Mpeg video elementary stream (*.mpv *.m1v *.m2v);;Mpeg audio elementary stream (*.mpa);;Transport Stream (*.ts);;BDAV Transport Stream (*.m2ts *.mts *.ssif);;Program Stream (*.mpg *.mpeg *.vob *.evo);;Matroska audio/video files (*.mkv *.mka *.mks);;MP4 audio/video files (*.mp4 *.m4a *.m4v);;Quick time audio/video files (*.mov);;Blu-ray play list (*.mpls *.mpl);;Blu-ray PGS subtitles (*.sup);;Text subtitles (*.srt);;WAVE - Uncompressed PCM audio (*.wav *.w64);;RAW LPCM Stream (*.pcm);;All files (*.*) - Все поддерживаемые медиафайлы (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (advanced audio coding) (*.aac);;Элементарный поток AVC/MVC/H.264 (*.avc *.mvc *.264 *.h264);;HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;Digital Theater System (*.dts);;DTS-HD Master Audio (*.dtshd);;Элеменарный поток MPEG видео (*.mpv *.m1v *.m2v);;Элеменарный поток MPEG аудио (*.mpa);;Транспортный поток (*.ts);;Транспортный поток BDAV (*.m2ts *.mts *.ssif);;Программный поток (*.mpg *.mpeg *.vob *.evo);;Аудио/видео файлы матрёшки (*.mkv *.mka *.mks);;Аудио/видео файлы MP4 (*.mp4 *.m4a *.m4v);;Аудио/видео файлы Quick time (*.mov);;Плейлист блюрея (*.mpls *.mpl);;PGS субтитры блюрея (*.sup);;Текстовые субтитры (*.srt);;WAVE - Несжатый звук PCM (*.wav *.w64);;RAW LPCM поток (*.pcm);;Все файлы (*.*) + + All files + Все файлы - - Transport stream (*.ts);;all files (*.*) - Транспортный поток (*.ts);;все файлы (*.*) - - - - BDAV Transport Stream (*.m2ts);;all files (*.*) - Транспортный поток BDAV (*.m2ts);;все файлы (*.*) + + AC3/E-AC3 + AC3/E-AC3 - Disk image (*.iso);;all files (*.*) - Образ диска (*.iso);;все файлы (*.*) + AAC (advanced audio coding) + AAC (advanced audio coding) - + + AVC/MVC/H.264 elementary stream + Элементарный поток AVC/MVC/H.264 + + + + HEVC (High Efficiency Video Codec) + HEVC (High Efficiency Video Codec) + + + + Digital Theater System + Digital Theater System + + + + DTS-HD Master Audio + DTS-HD Master Audio + + + + Mpeg video elementary stream + Элеменарный поток MPEG видео + + + + Mpeg audio elementary stream + Элеменарный поток MPEG аудио + + + + + Transport Stream + Транспортный поток + + + + + BDAV Transport Stream + Транспортный поток BDAV + + + + Program Stream + Программный поток + + + + Matroska audio/video files + Аудио/видео файлы матрёшки + + + + MP4 audio/video files + Аудио/видео файлы MP4 + + + + QuickTime audio/video files + Аудио/видео файлы QuickTime + + + + Blu-ray play list + Плейлист блюрея + + + + Blu-ray PGS subtitles + PGS субтитры блюрея + + + + Text subtitles + Текстовые субтитры + + + + WAVE - Uncompressed PCM audio + WAVE - Несжатый звук PCM + + + + RAW LPCM Stream + RAW LPCM поток + + + + All supported media files + Все поддерживаемые медиафайлы + + + + Disk image + Образ диска + + + Not supported Не поддерживается - - + + Unsupported format Неподдерживаемый формат - + Can't detect stream type. File name: "%1" Не определён тип потока. Имя файла: "%1" - + Add media files Добавить медиафайлы - + File already exists Файл уже есть - + File "%1" already exists Файл "%1" уже есть - + Downconvert DTS-HD to DTS Преобразовать из DTS-HD в DTS - + Downconvert TRUE-HD to AC3 Преобразовать из TRUE-HD в AC3 - + Downconvert E-AC3 to AC3 Преобразовать из E-AC3 в AC3 - + Unsupported format or all tracks are not recognized. File name: "%1" Неподдерживаемый формат или все дорожки не распознаны. Имя файла: "%1" - + Track %1 was not recognized and ignored. File name: "%2" Дорожка %1 не распознана и проигнорирована. Имя файла: "%2" - + Mux Создать - + tsMuxeR error Ошибка tsMuxeR - + tsMuxeR not found! tsMuxeR не найден! - + Can't execute tsMuxeR! Не возможно запустить tsMuxeR! - - + + No track selected Не выбрана дорожка - + Append media files Присоединить медиафайлы - + Invalid file extension Неверное расширение файла - + Appended file must have same file extension. Присоединяемый файл должен иметь тоже самое расширение файла. - + Sta&rt demuxing Ста&rт демуксинга - + Folder Папка - + Select file for muxing Выберите файл для муксинга - - + + Invalid file name Неверное имя файла - + The output file "%1" has invalid extension. Please, change file extension to ".m2ts" Выходной файл "%1" имеет недопустимое расширение. Пожалуйста, измените расширение файла на ".m2ts" - + The output file "%1" has invalid extension. Please, change file extension to ".iso" Выходной файл "%1" имеет недопустимое расширение. Пожалуйста, измените расширение файла на ".iso" - + file Used in expressions "Overwrite existing %1" and "The output %1 already exists". Используется в фразах "Переписать существующий %1" и "Файл %1 уже существует". файл - + directory каталог - + Overwrite existing %1? Переписать существующий %1? - + The output %1 "%2" already exists. Do you want to overwrite it? Результат %1 "%2" уже есть. Хотите его перезаписать? - + Muxing in progress Выполняется муксинг - + Demuxing in progress Выполняется демуксинг - + tsMuxeR project file (*.meta);;All files (*.*) Файл проекта tsMuxeR (*.meta);;все файлы (*.*) - + Can't create temporary meta file Не возможно создать временный файл проекта - + Can't create temporary meta file "%1" Не возможно создать временный файл проекта "%1" diff --git a/tsMuxerGUI/translations/tsmuxergui_zh.ts b/tsMuxerGUI/translations/tsmuxergui_zh.ts index cbd6d9c..4d12963 100644 --- a/tsMuxerGUI/translations/tsmuxergui_zh.ts +++ b/tsMuxerGUI/translations/tsmuxergui_zh.ts @@ -4,22 +4,22 @@ FontSettingsTableModel - + Name: 名称: - + Size: 尺寸: - + Color: 颜色: - + Options: 选项: @@ -129,7 +129,7 @@ - + General track options 常规轨道选项 @@ -195,7 +195,7 @@ - + Downconvert HD audio 降频高清音频 @@ -221,7 +221,7 @@ - + Demux options Demux选项 @@ -734,7 +734,7 @@ - + Demux @@ -745,7 +745,7 @@ - + File name 文件名 @@ -761,7 +761,7 @@ - + Sta&rt muxing 开始muxing @@ -771,196 +771,288 @@ 保存项目文件 - - All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (advanced audio coding) (*.aac);;AVC/MVC/H.264 elementary stream (*.avc *.mvc *.264 *.h264);;HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;Digital Theater System (*.dts);;DTS-HD Master Audio (*.dtshd);;Mpeg video elementary stream (*.mpv *.m1v *.m2v);;Mpeg audio elementary stream (*.mpa);;Transport Stream (*.ts);;BDAV Transport Stream (*.m2ts *.mts *.ssif);;Program Stream (*.mpg *.mpeg *.vob *.evo);;Matroska audio/video files (*.mkv *.mka *.mks);;MP4 audio/video files (*.mp4 *.m4a *.m4v);;Quick time audio/video files (*.mov);;Blu-ray play list (*.mpls *.mpl);;Blu-ray PGS subtitles (*.sup);;Text subtitles (*.srt);;WAVE - Uncompressed PCM audio (*.wav *.w64);;RAW LPCM Stream (*.pcm);;All files (*.*) - 所有支持的媒体文件 (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;AC3/E-AC3 (*.ac3 *.ddp);;AAC (高级音频编码)) (*.aac);;AVC/MVC/H.264 基本流 (*.avc *.mvc *.264 *.h264);;HEVC (高效视频编解码器) (*.hevc *.hvc *.265 *.h265);;数字影院系统 (*.dts);;DTS-HD Master Audio (*.dtshd);;Mpeg视频基本流 (*.mpv *.m1v *.m2v);;MPEG 音频基本流 (*.mpa);;传输流 (*.ts);;BDAV 传输流 (*.m2ts *.mts *.ssif);;节目流 (*.mpg *.mpeg *.vob *.evo);;Matroska 音频/视频 文件 (*.mkv *.mka *.mks);;MP4 音频/视频 文件 (*.mp4 *.m4a *.m4v);;Quick 音频/视频 文件 (*.mov);;蓝光播放列表 (*.mpls *.mpl);;蓝光PGS字幕 (*.sup);;文本字幕 (*.srt);;WAVE-未压缩的PCM音频 (*.wav *.w64);;RAW LPCM流 (*.pcm);;所有文件 (*.*) + + All files + 所有文件 - - Transport stream (*.ts);;all files (*.*) - 传输流 (*.ts);;所有文件 (*.*) - - - - BDAV Transport Stream (*.m2ts);;all files (*.*) - BDAV 传输流 (*.m2ts);;所有文件 (*.*) + + AC3/E-AC3 + AC3/E-AC3 - Disk image (*.iso);;all files (*.*) - 磁盘镜像 (*.iso);;所有文件 (*.*) + AAC (advanced audio coding) + AAC (高级音频编码) - + + AVC/MVC/H.264 elementary stream + AVC/MVC/H.264 基本流 + + + + HEVC (High Efficiency Video Codec) + HEVC (高效视频编解码器) + + + + Digital Theater System + 数字影院系统 + + + + DTS-HD Master Audio + DTS-HD Master Audio + + + + Mpeg video elementary stream + Mpeg视频基本流 + + + + Mpeg audio elementary stream + MPEG 音频基本流 + + + + + Transport Stream + 传输流 + + + + + BDAV Transport Stream + BDAV 传输流 + + + + Program Stream + 节目流 + + + + Matroska audio/video files + Matroska 音频/视频 文件 + + + + MP4 audio/video files + MP4 音频/视频 文件 + + + + QuickTime audio/video files + QuickTime 音频/视频 文件 + + + + Blu-ray play list + 蓝光播放列表 + + + + Blu-ray PGS subtitles + 蓝光PGS字幕 + + + + Text subtitles + 文本字幕 + + + + WAVE - Uncompressed PCM audio + WAVE-未压缩的PCM音频 + + + + RAW LPCM Stream + RAW LPCM流 + + + + All supported media files + 所有支持的媒体文件 + + + + Disk image + 磁盘镜像 + + + Not supported 不支持 - - + + Unsupported format 不支持的格式 - + Can't detect stream type. File name: "%1" 无法检测流类型。 文件名: "%1" - + Add media files 添加媒体文件 - + File already exists 文件已存在 - + File "%1" already exists 文件 "%1" 已存在 - + Downconvert DTS-HD to DTS 降频转换DTS-HD为DTS - + Downconvert TRUE-HD to AC3 降频转换TRUE-HD为AC3 - + Downconvert E-AC3 to AC3 降频转换E-AC3为AC3 - + Unsupported format or all tracks are not recognized. File name: "%1" 不支持的格式或无法识别所有轨道。文件名: "%1" - + Track %1 was not recognized and ignored. File name: "%2" 轨道 %1 无法识别和忽略。文件名: "%2" - + Mux - + tsMuxeR error tsMuxeR 错误 - + tsMuxeR not found! tsMuxeR 未找到! - + Can't execute tsMuxeR! 无法执行tsMuxeR! - - + + No track selected 未选定轨道 - + Append media files 附加媒体文件 - + Invalid file extension 无效的文件扩展名 - + Appended file must have same file extension. 附加文件必须具有相同的文件扩展名。 - + Sta&rt demuxing 开始demuxing - + Folder 文件夹 - + Select file for muxing 选择要muxing的文件 - - + + Invalid file name 无效的文件名 - + The output file "%1" has invalid extension. Please, change file extension to ".m2ts" 输出文件 "%1" 具有无效的扩展名。 请将文件扩展名更改为 ".m2ts" - + The output file "%1" has invalid extension. Please, change file extension to ".iso" 输出文件 "%1" 具有无效的扩展名。 请将文件扩展名更改为 ".iso" - + file Used in expressions "Overwrite existing %1" and "The output %1 already exists". 文件 - + directory 目录 - + Overwrite existing %1? 覆盖现有的 %1? - + The output %1 "%2" already exists. Do you want to overwrite it? 输出 %1 "%2" 已存在。要覆盖它吗? - + Muxing in progress Muxing正在进行中 - + Demuxing in progress Demuxing正在进行中 - + tsMuxeR project file (*.meta);;All files (*.*) tsMuxeR 项目文件 (*.meta);;所有文件 (*.*) - + Can't create temporary meta file 无法创建临时项目文件 - + Can't create temporary meta file "%1" 无法创建临时项目文件 "%1" diff --git a/tsMuxerGUI/tsmuxerwindow.cpp b/tsMuxerGUI/tsmuxerwindow.cpp index 5ddae49..00f4fce 100644 --- a/tsMuxerGUI/tsmuxerwindow.cpp +++ b/tsMuxerGUI/tsmuxerwindow.cpp @@ -15,6 +15,8 @@ #include #include +#include + #include "checkboxedheaderview.h" #include "codecinfo.h" #include "fontsettingstablemodel.h" @@ -29,41 +31,76 @@ namespace { +using FileFilterVec = std::vector>>; + +QString makeFileFilter(const FileFilterVec &filters) +{ + QString rv; + QTextStream s(&rv); + for (auto &f : filters) + { + s << f.first << " ("; + for (auto &e : f.second) + { + s << "*." << e; + if (&e != &f.second.back()) + { + s << ' '; + } + } + s << ");;"; + } + rv.append(QString("%1 (*.*)").arg(TsMuxerWindow::tr("All files"))); + return rv; +} + QString fileDialogFilter() { - return TsMuxerWindow::tr( - "All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.dtshd *.ts *.m2ts *.mts *.ssif *.mpg *.mpeg *.vob *.evo *.mkv *.mka *.mks *.mp4 *.m4a *.m4v *.mov *.sup *.wav *.w64 *.pcm *.m1v *.m2v *.vc1 *.hevc *.hvc *.265 *.h265 *.mpls *.mpl *.srt);;\ -AC3/E-AC3 (*.ac3 *.ddp);;\ -AAC (advanced audio coding) (*.aac);;\ -AVC/MVC/H.264 elementary stream (*.avc *.mvc *.264 *.h264);;\ -HEVC (High Efficiency Video Codec) (*.hevc *.hvc *.265 *.h265);;\ -Digital Theater System (*.dts);;\ -DTS-HD Master Audio (*.dtshd);;\ -Mpeg video elementary stream (*.mpv *.m1v *.m2v);;\ -Mpeg audio elementary stream (*.mpa);;\ -Transport Stream (*.ts);;\ -BDAV Transport Stream (*.m2ts *.mts *.ssif);;\ -Program Stream (*.mpg *.mpeg *.vob *.evo);;\ -Matroska audio/video files (*.mkv *.mka *.mks);;\ -MP4 audio/video files (*.mp4 *.m4a *.m4v);;\ -Quick time audio/video files (*.mov);;\ -Blu-ray play list (*.mpls *.mpl);;\ -Blu-ray PGS subtitles (*.sup);;\ -Text subtitles (*.srt);;\ -WAVE - Uncompressed PCM audio (*.wav *.w64);;\ -RAW LPCM Stream (*.pcm);;\ -All files (*.*)"); + FileFilterVec filters = {{TsMuxerWindow::tr("AC3/E-AC3"), {"ac3", "ddp", "ec3"}}, + {TsMuxerWindow::tr("AAC (advanced audio coding)"), {"aac"}}, + {TsMuxerWindow::tr("AVC/MVC/H.264 elementary stream"), {"avc", "mvc", "264", "h264"}}, + {TsMuxerWindow::tr("HEVC (High Efficiency Video Codec)"), {"hevc", "hvc", "265", "h265"}}, + {TsMuxerWindow::tr("Digital Theater System"), {"dts"}}, + {TsMuxerWindow::tr("DTS-HD Master Audio"), {"dtshd"}}, + {TsMuxerWindow::tr("Mpeg video elementary stream"), {"mpv", "m1v", "m2v"}}, + {TsMuxerWindow::tr("Mpeg audio elementary stream"), {"mpa"}}, + {TsMuxerWindow::tr("Transport Stream"), {"ts"}}, + {TsMuxerWindow::tr("BDAV Transport Stream"), {"m2ts", "mts", "ssif"}}, + {TsMuxerWindow::tr("Program Stream"), {"mpg", "mpeg", "vob", "evo"}}, + {TsMuxerWindow::tr("Matroska audio/video files"), {"mkv", "mka", "mks"}}, + {TsMuxerWindow::tr("MP4 audio/video files"), {"mp4", "m4a", "m4v"}}, + {TsMuxerWindow::tr("QuickTime audio/video files"), {"mov"}}, + {TsMuxerWindow::tr("Blu-ray play list"), {"mpls", "mpl"}}, + {TsMuxerWindow::tr("Blu-ray PGS subtitles"), {"sup"}}, + {TsMuxerWindow::tr("Text subtitles"), {"srt"}}, + {TsMuxerWindow::tr("WAVE - Uncompressed PCM audio"), {"wav", "w64"}}, + {TsMuxerWindow::tr("RAW LPCM Stream"), {"pcm"}}}; + std::unordered_set uniqueExts; + for (auto &f : filters) + { + uniqueExts.insert(std::begin(f.second), std::end(f.second)); + } + std::vector allSupportedExts; + for (auto &s : uniqueExts) + { + allSupportedExts.push_back(s.c_str()); + } + filters.insert(std::begin(filters), {TsMuxerWindow::tr("All supported media files"), allSupportedExts}); + return makeFileFilter(filters); } QString TI_DEFAULT_TAB_NAME() { return TsMuxerWindow::tr("General track options"); } QString TI_DEMUX_TAB_NAME() { return TsMuxerWindow::tr("Demux options"); } -QString TS_SAVE_DIALOG_FILTER() { return TsMuxerWindow::tr("Transport stream (*.ts);;all files (*.*)"); } +QString TS_SAVE_DIALOG_FILTER() { return makeFileFilter({{TsMuxerWindow::tr("Transport Stream"), {"ts"}}}); } -QString M2TS_SAVE_DIALOG_FILTER() { return TsMuxerWindow::tr("BDAV Transport Stream (*.m2ts);;all files (*.*)"); } +QString M2TS_SAVE_DIALOG_FILTER() +{ + return makeFileFilter({{TsMuxerWindow::tr("BDAV Transport Stream"), {"m2ts", "mts", "ssif"}}}); +} -QString ISO_SAVE_DIALOG_FILTER() { return TsMuxerWindow::tr("Disk image (*.iso);;all files (*.*)"); } +QString ISO_SAVE_DIALOG_FILTER() { return makeFileFilter({{TsMuxerWindow::tr("Disk image"), {"iso"}}}); } QSettings *settings = nullptr;