diff --git a/tsMuxerGUI/images.qrc b/tsMuxerGUI/images.qrc index a2247b6..bb537e4 100644 --- a/tsMuxerGUI/images.qrc +++ b/tsMuxerGUI/images.qrc @@ -7,5 +7,6 @@ sounds/fail.wav images/icon.png images/btn_donate.png + translations/about_en.html diff --git a/tsMuxerGUI/translations/about_en.html b/tsMuxerGUI/translations/about_en.html new file mode 100644 index 0000000..9cd2541 --- /dev/null +++ b/tsMuxerGUI/translations/about_en.html @@ -0,0 +1,64 @@ + + +tsMuxeR +

tsMuxeR – the software utility to create TS and M2TS files for IP broadcasting as well as for viewing at hardware video players (i.e., Dune HD Ultra, Sony Playstation3, Samsung Smart TV and others).

+

tsMuxeR is open source.

+

Supported incoming formats:

+ +

Supported videocodecs:

+ +

Supported audiocodecs:

+ +

Supported subtitle types:

+ +

Supported containers and formats:

+ +

Main features:

+ diff --git a/tsMuxerGUI/translations/tsmuxergui_en.ts b/tsMuxerGUI/translations/tsmuxergui_en.ts index 5abaed8..0212ff9 100644 --- a/tsMuxerGUI/translations/tsmuxergui_en.ts +++ b/tsMuxerGUI/translations/tsmuxergui_en.ts @@ -106,6 +106,7 @@ + General track options @@ -196,6 +197,7 @@ + Demux options @@ -326,625 +328,650 @@ - + Options - + Add blank playlist for cropped video - + Blank playlist - + Force BD-ROM V3 format - + First MPLS file - + First M2TS file - + Start mux time - + 45 Khz clock: - + 3D settings - + Use base video stream for right eye - + PIP settings - + Corner - + Top Left - + Top Right - + Bottom Right - + Bottom Left - + Horizontal offset - + Size - + Not scaled - + Half (x 1/2) - + Quarter (x 1/4) - + One and a Half (x 1.5) - + Full Screen - + Vertical offset - + Default tracks - + Subtitle - + When checked, only subtitles marked as "forced" in the subtitle stream will appear. - + Forced only - + Audio - + Split && cut - + Splitting - + No split - + Split by duration every - + sec - + Split by size every - + KB - + KiB - + MB - + MiB - + GB - + GiB - + Cutting - + Enable cutting - + Start - + End - + Subtitles - + Default text based subtitles font: - - - - - + + + + + New Row - - + + New Column - + Name: - + Size: - + 65 - + Color: - + 0xffffffff - + Charset: - + Default - + Options: - + Font - + Color - + Additional border, pixels: - + line spacing: - + Fade in/out animation: - + None - + Fast - + Medium - + Slow - + Very slow - + Vertical position: - + Top of screen - + top offset, pixels: - - + + Screen center - + Bottom of screen - + bottom offset, pixels: - + Horizontal position: - + Left of screen - + left offset, pixels: - + Right of screen - + right offset, pixels: - + About - + Output - + TS muxing - + M2TS muxing - + Blu-ray ISO - + Blu-ray folder - + AVCHD folder - - + + Demux - + Disk label - - + + File name - + Browse - + Meta file - - + + Sta&rt muxing - + Save meta file - + + All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.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);;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 (*.*) + + + + + tsMuxeR project file (*.meta);;All files (*.*) + + + + + Transport stream (*.ts);;all files (*.*) + + + + + BDAV Transport Stream (*.m2ts);;all files (*.*) + + + + + Disk image (*.iso);;all files (*.*) + + + + Not supported - - + + Unsupported format - + Can't detect stream type. File name: "%1" - + Add media file - + File already exists - + File "%1" already exists - + Unsupported format or all tracks are not recognized. File name: "%1" - + Some tracks not recognized. This tracks was ignored. File name: "%1" - + Mux - + tsMuxeR error - + tsMuxeR not found! - + Can't execute tsMuxeR! - - + + No track selected - + Append media file - + 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 - + Can't create temporary meta file - + Can't create temporary meta file "%1" diff --git a/tsMuxerGUI/translations/tsmuxergui_ru.ts b/tsMuxerGUI/translations/tsmuxergui_ru.ts index 0a8f88d..b25d039 100644 --- a/tsMuxerGUI/translations/tsmuxergui_ru.ts +++ b/tsMuxerGUI/translations/tsmuxergui_ru.ts @@ -106,6 +106,7 @@ + General track options Общие параметры дорожки @@ -196,6 +197,7 @@ + Demux options Параметры записи дорожек @@ -326,626 +328,651 @@ Главы: - + Options Параметры - + Add blank playlist for cropped video Добавить пустой плэйлист - + Blank playlist Пустой плэйлист - + Force BD-ROM V3 format Задать 3 версию формата BD-ROM - + First MPLS file Первый файл MPLS - + First M2TS file Первый файл M2TS - + Start mux time Время начала записи - + 45 Khz clock: 1/45 милисекунды: - + 3D settings Настройки 3D - + Use base video stream for right eye Использовать основной видеопоток для правого глаза - + PIP settings Настройки PIP - + Corner Угол - + Top Left Верхний Левый - + Top Right Верхний Правый - + Bottom Right Нижний Правый - + Bottom Left Нижний Левый - + Horizontal offset Смещение по горизонтали - + Size Размер - + Not scaled Не маштабировать - + Half (x 1/2) Половина (x 1/2) - + Quarter (x 1/4) Четверть (x 1/4) - + One and a Half (x 1.5) Полтора (x 1.5) - + Full Screen На весь экран - + Vertical offset Смещение по вертикали - + Default tracks Дорожки по умолчанию - + Subtitle Субтитры - + When checked, only subtitles marked as "forced" in the subtitle stream will appear. Если установлен будут отображаться только субтитры, помеченные как "принудительные". - + Forced only Только принудительные - + Audio Звук - + Split && cut Нарезка && обрезка - + Splitting Нарезка - + No split Не нарезать - + Split by duration every Нарезать через каждые - + sec сек - + Split by size every Нарезать по размеру каждые - + KB Килобайт - + KiB Кибибайт - + MB Мегабайт - + MiB Мебибайт - + GB Гигабайт - + GiB Гибибайт - + Cutting Обрезка - + Enable cutting Разрешить обрезку - + Start Начало - + End Конец - + Subtitles Субтитры - + Default text based subtitles font: Шрифт текстовых субтитров по умолчанию: - - - - - + + + + + New Row Новая Строка - - + + New Column Новый Столбец - + Name: Имя: - + Size: Размер: - + 65 65 - + Color: Цвет: - + 0xffffffff 0xffffffff - + Charset: Набор символов: - + Default По умолчанию - + Options: Параметры: - + Font Шрифт - + Color Цвет - + Additional border, pixels: Дополнительная рамка, пикселей: - + line spacing: Междустрочное расстояние: - + Fade in/out animation: Анимация появления/исчезания: - + None Отсутствует - + Fast Быстрое - + Medium Среднее - + Slow Медленное - + Very slow Очень медленное - + Vertical position: Позиция по вертикали: - + Top of screen Верх экрана - + top offset, pixels: отступ от верха, пикселей: - - + + Screen center Центр экрана - + Bottom of screen Низ экрана - + bottom offset, pixels: отступ от низа, пикселей: - + Horizontal position: Позиция по горизонтали: - + Left of screen слева экрана - + left offset, pixels: отступ слева, пикселей: - + Right of screen справа экрана - + right offset, pixels: отступ справа, пикселей: - + About О программе - + Output Результат - + TS muxing Запись в TS - + M2TS muxing Запись в M2TS - + Blu-ray ISO Запись блюрея в файл ISO - + Blu-ray folder Запись блюрея в папку - + AVCHD folder Запись AVCHD в папку - - + + Demux Демукс - + Disk label Имя диска - - + + File name Имя Файла - + Browse Выбрать - + Meta file Файл проекта tsMuxeR - - + + Sta&rt muxing Ста&рт муксинга - + Save meta file Сохранить проект - + + All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.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);;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 (*.*) + + + + + tsMuxeR project file (*.meta);;All files (*.*) + + + + + Transport stream (*.ts);;all files (*.*) + + + + + BDAV Transport Stream (*.m2ts);;all files (*.*) + + + + + Disk image (*.iso);;all files (*.*) + + + + Not supported Не поддерживается - - + + Unsupported format Неподдерживаемый формат - + Can't detect stream type. File name: "%1" Не определён тип потока. Имя файла: "%1" - + Add media file Добавить медиафайл - + File already exists Файл уже есть - + File "%1" already exists Файл "%1" уже есть - + Unsupported format or all tracks are not recognized. File name: "%1" Неподдерживаемый формат или все дорожки не распознаны. Имя файла: "%1" - + Some tracks not recognized. This tracks was ignored. File name: "%1" Некоторые дорожки не распознаны. Эта дорожка была проигнорирована. Имя файла: "%1" - + Mux Создать - + tsMuxeR error Ошибка tsMuxeR - + tsMuxeR not found! tsMuxeR не найден! - + Can't execute tsMuxeR! Не возможно запустить tsMuxeR! - - + + No track selected Не выбрана дорожка - + Append media file Присоединить медиафайл - + 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 Выполняется демуксинг - + 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 e7d3aa6..8f7075c 100644 --- a/tsMuxerGUI/tsmuxerwindow.cpp +++ b/tsMuxerGUI/tsmuxerwindow.cpp @@ -20,8 +20,10 @@ #include "muxForm.h" #include "ui_tsmuxerwindow.h" -const char fileDialogFilter[] = - "All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.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);;\ +QString fileDialogFilter() +{ + return TsMuxerWindow::tr( + "All supported media files (*.aac *.mpv *.mpa *.avc *.mvc *.264 *.h264 *.ac3 *.dts *.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);;\ @@ -40,14 +42,20 @@ Blu-ray PGS subtitles (*.sup);;\ Text subtitles (*.srt);;\ WAVE - Uncompressed PCM audio (*.wav *.w64);;\ RAW LPCM Stream (*.pcm);;\ -All files (*.*)"; -const char saveMetaFilter[] = "tsMuxeR project file (*.meta);;All files (*.*)"; +All files (*.*)"); +} -const char TI_DEFAULT_TAB_NAME[] = "General track options"; -const char TI_DEMUX_TAB_NAME[] = "Demux options"; -const char TS_SAVE_DIALOG_FILTER[] = "Transport stream (*.ts);;all files (*.*)"; -const char M2TS_SAVE_DIALOG_FILTER[] = "BDAV Transport Stream (*.m2ts);;all files (*.*)"; -const char ISO_SAVE_DIALOG_FILTER[] = "Disk image (*.iso);;all files (*.*)"; +QString saveMetaFilter() { return TsMuxerWindow::tr("tsMuxeR project file (*.meta);;All files (*.*)"); } + +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 M2TS_SAVE_DIALOG_FILTER() { return TsMuxerWindow::tr("BDAV Transport Stream (*.m2ts);;all files (*.*)"); } + +QString ISO_SAVE_DIALOG_FILTER() { return TsMuxerWindow::tr("Disk image (*.iso);;all files (*.*)"); } QSettings *settings = nullptr; @@ -229,6 +237,13 @@ QString getComboBoxTrackText(int idx, const QtvCodecInfo &codecInfo) return text; } +void initLanguageComboBox(QComboBox *comboBox) +{ + comboBox->addItem("English", "en"); + comboBox->addItem(QString::fromUtf8("Русский"), "ru"); + comboBox->setCurrentIndex(-1); // makes sure currentIndexChanged() is emitted when reading settings. +} + } // namespace // ----------------------- TsMuxerWindow ------------------------------------- @@ -269,6 +284,7 @@ TsMuxerWindow::TsMuxerWindow() ui->setupUi(this); qApp->installTranslator(&qtCoreTranslator); qApp->installTranslator(&tsMuxerTranslator); + initLanguageComboBox(ui->languageSelectComboBox); setWindowTitle("tsMuxeR GUI " TSMUXER_VERSION); lastInputDir = QDir::homePath(); lastOutputDir = QDir::homePath(); @@ -293,11 +309,6 @@ TsMuxerWindow::TsMuxerWindow() ui->outFileName->setText(getDefaultOutputFileName()); - // next properties supported by Designer in version 4.5 only. - ui->listViewFont->horizontalHeader()->setVisible(false); - ui->listViewFont->verticalHeader()->setVisible(false); - ui->listViewFont->horizontalHeader()->setStretchLastSection(true); - m_header = new QnCheckBoxedHeaderView(this); ui->trackLV->setHorizontalHeader(m_header); ui->trackLV->horizontalHeader()->setStretchLastSection(true); @@ -310,7 +321,7 @@ TsMuxerWindow::TsMuxerWindow() ///////////////////////////////////////////////////////////// for (int i = 0; i <= 3600; i += 5 * 60) ui->memoChapters->insertPlainText(floatToTime(i, '.') + '\n'); - saveDialogFilter = tr(TS_SAVE_DIALOG_FILTER); + mSaveDialogFilter = TS_SAVE_DIALOG_FILTER(); const static int colWidths[] = {28, 200, 62, 38, 10}; for (unsigned i = 0u; i < sizeof(colWidths) / sizeof(int); ++i) ui->trackLV->horizontalHeader()->resizeSection(i, colWidths[i]); @@ -369,8 +380,6 @@ TsMuxerWindow::TsMuxerWindow() connect(ui->checkBoxCrop, &QCheckBox::stateChanged, this, &TsMuxerWindow::onSavedParamChanged); connect(ui->checkBoxRVBR, &QAbstractButton::clicked, this, &TsMuxerWindow::onGeneralCheckboxClicked); connect(ui->checkBoxCBR, &QAbstractButton::clicked, this, &TsMuxerWindow::onGeneralCheckboxClicked); - // connect(ui->checkBoxuseAsynIO, SIGNAL(stateChanged(int)), this, - // SLOT(onSavedParamChanged())); connect(ui->radioButtonStoreOutput, &QAbstractButton::clicked, this, &TsMuxerWindow::onSavedParamChanged); connect(ui->radioButtonOutoutInInput, &QAbstractButton::clicked, this, &TsMuxerWindow::onSavedParamChanged); connect(ui->editVBVLen, spinBoxValueChanged, this, &TsMuxerWindow::onGeneralSpinboxValueChanged); @@ -382,7 +391,7 @@ TsMuxerWindow::TsMuxerWindow() connect(ui->radioButtonNoChapters, &QAbstractButton::clicked, this, &TsMuxerWindow::onChapterParamsChanged); connect(ui->radioButtonCustomChapters, &QAbstractButton::clicked, this, &TsMuxerWindow::onChapterParamsChanged); connect(ui->spinEditChapterLen, spinBoxValueChanged, this, &TsMuxerWindow::onChapterParamsChanged); - connect(ui->memoChapters, &QTextEdit::textChanged, this, &TsMuxerWindow::onChapterParamsChanged); + connect(ui->memoChapters, &QPlainTextEdit::textChanged, this, &TsMuxerWindow::onChapterParamsChanged); connect(ui->noSplit, &QAbstractButton::clicked, this, &TsMuxerWindow::onSplitCutParamsChanged); connect(ui->splitByDuration, &QAbstractButton::clicked, this, &TsMuxerWindow::onSplitCutParamsChanged); connect(ui->splitBySize, &QAbstractButton::clicked, this, &TsMuxerWindow::onSplitCutParamsChanged); @@ -870,7 +879,7 @@ void TsMuxerWindow::addFiles(const QList &files) void TsMuxerWindow::onAddBtnClick() { QString fileName = QDir::toNativeSeparators( - QFileDialog::getOpenFileName(this, tr("Add media file"), lastInputDir, tr(fileDialogFilter))); + QFileDialog::getOpenFileName(this, tr("Add media file"), lastInputDir, fileDialogFilter())); if (fileName.isEmpty()) return; lastInputDir = fileName; @@ -938,7 +947,7 @@ void TsMuxerWindow::trackLVItemSelectionChanged() while (ui->tabWidgetTracks->count()) ui->tabWidgetTracks->removeTab(0); if (ui->trackLV->currentRow() == -1) { - ui->tabWidgetTracks->addTab(ui->tabSheetFake, tr(TI_DEFAULT_TAB_NAME)); + ui->tabWidgetTracks->addTab(ui->tabSheetFake, TI_DEFAULT_TAB_NAME()); return; } QtvCodecInfo *codecInfo = getCurrentCodec(); @@ -949,7 +958,7 @@ void TsMuxerWindow::trackLVItemSelectionChanged() { if (isVideoCodec(codecInfo->displayName)) { - ui->tabWidgetTracks->addTab(ui->tabSheetVideo, tr(TI_DEFAULT_TAB_NAME)); + ui->tabWidgetTracks->addTab(ui->tabSheetVideo, TI_DEFAULT_TAB_NAME()); ui->checkFPS->setChecked(codecInfo->checkFPS); ui->checkBoxLevel->setChecked(codecInfo->checkLevel); @@ -980,9 +989,9 @@ void TsMuxerWindow::trackLVItemSelectionChanged() } else { - ui->tabWidgetTracks->addTab(ui->tabSheetAudio, tr(TI_DEFAULT_TAB_NAME)); + ui->tabWidgetTracks->addTab(ui->tabSheetAudio, TI_DEFAULT_TAB_NAME()); if (codecInfo->displayName == "LPCM") - ui->tabWidgetTracks->addTab(ui->demuxLpcmOptions, tr(TI_DEMUX_TAB_NAME)); + ui->tabWidgetTracks->addTab(ui->demuxLpcmOptions, TI_DEMUX_TAB_NAME()); if (codecInfo->displayName == "DTS-HD") ui->dtsDwnConvert->setText("Downconvert DTS-HD to DTS"); @@ -1872,12 +1881,21 @@ void TsMuxerWindow::updateMuxTime2() updateMetaLines(); } -void TsMuxerWindow::onLanguageComboBoxIndexChanged(int x) +void TsMuxerWindow::onLanguageComboBoxIndexChanged(int idx) { - static const QString languages[] = {"en", "ru"}; - auto lang = languages[x]; + auto lang = ui->languageSelectComboBox->itemData(idx).toString(); qtCoreTranslator.load(QString("qtbase_%1").arg(lang), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); tsMuxerTranslator.load(QString("tsmuxergui_%1").arg(lang), ":/i18n"); + QFile aboutContent(QString(":/about_%1.html").arg(lang)); + if (aboutContent.open(QIODevice::ReadOnly)) + { + ui->textEdit->setHtml(QString::fromUtf8(aboutContent.readAll())); + } + else + { + qWarning() << "Failed to open about.html for language" << lang << aboutContent.errorString(); + ui->textEdit->clear(); + } } void TsMuxerWindow::updateMetaLines() @@ -1886,7 +1904,8 @@ void TsMuxerWindow::updateMetaLines() return; ui->memoMeta->clear(); - ui->memoMeta->append(getMuxOpts()); + QString metaContent; + metaContent.append(getMuxOpts() + '\n'); QString tmpFps; for (int i = 0; i < ui->trackLV->rowCount(); ++i) { @@ -1951,7 +1970,7 @@ void TsMuxerWindow::updateMetaLines() if (codecInfo->subTrack != 0) postfix += QString(", subTrack=") + QString::number(codecInfo->subTrack); if (isVideoCodec(codecInfo->displayName)) - ui->memoMeta->append(prefix + getVideoMetaInfo(codecInfo) + postfix); + metaContent.append(prefix + getVideoMetaInfo(codecInfo) + postfix + '\n'); else { if (isDiskOutput() && ui->defaultAudioTrackCheckBox->isChecked() && @@ -1959,9 +1978,10 @@ void TsMuxerWindow::updateMetaLines() { postfix += QString(", default"); } - ui->memoMeta->append(prefix + getAudioMetaInfo(codecInfo) + postfix); + metaContent.append(prefix + getAudioMetaInfo(codecInfo) + postfix + '\n'); } } + ui->memoMeta->setPlainText(metaContent); } void TsMuxerWindow::onFontBtnClicked() @@ -2159,7 +2179,7 @@ void TsMuxerWindow::deleteTrack(int idx) { lastSourceDir.clear(); while (ui->tabWidgetTracks->count()) ui->tabWidgetTracks->removeTab(0); - ui->tabWidgetTracks->addTab(ui->tabSheetFake, tr(TI_DEFAULT_TAB_NAME)); + ui->tabWidgetTracks->addTab(ui->tabSheetFake, TI_DEFAULT_TAB_NAME()); ui->outFileName->setText(getDefaultOutputFileName()); outFileNameModified = false; } @@ -2204,7 +2224,7 @@ void TsMuxerWindow::onAppendButtonClick() return; } QString fileName = QDir::toNativeSeparators( - QFileDialog::getOpenFileName(this, tr("Append media file"), lastInputDir, tr(fileDialogFilter))); + QFileDialog::getOpenFileName(this, tr("Append media file"), lastInputDir, fileDialogFilter())); if (fileName.isEmpty()) return; lastInputDir = fileName; @@ -2368,17 +2388,17 @@ void TsMuxerWindow::RadioButtonMuxClick() if (ui->radioButtonTS->isChecked()) { ui->outFileName->setText(changeFileExt(ui->outFileName->text(), "ts")); - saveDialogFilter = tr(TS_SAVE_DIALOG_FILTER); + mSaveDialogFilter = TS_SAVE_DIALOG_FILTER(); } else if (ui->radioButtonBluRayISO->isChecked()) { ui->outFileName->setText(changeFileExt(ui->outFileName->text(), "iso")); - saveDialogFilter = tr(ISO_SAVE_DIALOG_FILTER); + mSaveDialogFilter = ISO_SAVE_DIALOG_FILTER(); } else { ui->outFileName->setText(changeFileExt(ui->outFileName->text(), "m2ts")); - saveDialogFilter = tr(M2TS_SAVE_DIALOG_FILTER); + mSaveDialogFilter = M2TS_SAVE_DIALOG_FILTER(); } } ui->DiskLabel->setVisible(ui->radioButtonBluRayISO->isChecked()); @@ -2442,7 +2462,7 @@ void TsMuxerWindow::saveFileDialog() path = QFileInfo(fileName).absolutePath(); } QString fileName = QDir::toNativeSeparators( - QFileDialog::getSaveFileName(this, tr("Select file for muxing"), path, saveDialogFilter)); + QFileDialog::getSaveFileName(this, tr("Select file for muxing"), path, mSaveDialogFilter)); if (!fileName.isEmpty()) { ui->outFileName->setText(fileName); @@ -2529,7 +2549,7 @@ void TsMuxerWindow::startMuxing() void TsMuxerWindow::saveMetaFileBtnClick() { QString metaName = - QFileDialog::getSaveFileName(this, "", changeFileExt(ui->outFileName->text(), "meta"), tr(saveMetaFilter)); + QFileDialog::getSaveFileName(this, "", changeFileExt(ui->outFileName->text(), "meta"), mSaveDialogFilter); if (metaName.isEmpty()) return; QFileInfo fi(metaName); diff --git a/tsMuxerGUI/tsmuxerwindow.h b/tsMuxerGUI/tsmuxerwindow.h index 79d00f9..660b08a 100644 --- a/tsMuxerGUI/tsmuxerwindow.h +++ b/tsMuxerGUI/tsmuxerwindow.h @@ -166,7 +166,7 @@ class TsMuxerWindow : public QWidget bool outFileNameModified; QString oldFileName; bool outFileNameDisableChange; - QString saveDialogFilter; + QString mSaveDialogFilter; MuxForm* muxForm; QString newFileName; QList codecList; diff --git a/tsMuxerGUI/tsmuxerwindow.ui b/tsMuxerGUI/tsmuxerwindow.ui index d5e5da2..4bf77d1 100644 --- a/tsMuxerGUI/tsmuxerwindow.ui +++ b/tsMuxerGUI/tsmuxerwindow.ui @@ -1226,26 +1226,16 @@ - + false true - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p></body></html> - 20 - - false - @@ -1971,6 +1961,15 @@ p, li { white-space: pre-wrap; } 84 + + false + + + true + + + false + New Row @@ -2593,68 +2592,15 @@ p, li { white-space: pre-wrap; } + + true + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><title>tsMuxeR</title><style type="text/css"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/justdan96/tsMuxer"><span style=" font-size:8pt; font-weight:600; text-decoration: underline; color:#0000ff;">tsMuxeR</span></a><span style=" font-size:8pt;"> – the software utility to create TS and M2TS files for IP broadcasting as well as for viewing at hardware video players (i.e., Dune HD Ultra, Sony Playstation3, Samsung Smart TV and others). </span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">tsMuxeR is open source. </span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Supported incoming formats: </span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"> -<li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">TS; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">M2TS; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">SIFF;</li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MOV;</li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MP4;</li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MKV;</li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Blu-ray; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Demux option. </li></ul> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Supported videocodecs: </span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"> -<li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">H.264/MVC </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">H.265/HEVC; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Microsoft VC-1; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MPEG-2. </li></ul> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Supported audiocodecs: </span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"> -<li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">AAC; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">AC3 / E-AC3(DD+); </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dolby True HD (for streams with AC3 core only); </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">DTS/ DTS-HD; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">LPCM. </li></ul> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Supported subtitle types: </span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"> -<li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">M2TS Presentation graphic stream. </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">SRT text subtitles </li></ul> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Supported containers and formats: </span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"> -<li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Elementary stream; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Transport stream TS and M2TS; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Program stream EVO/VOB/MPG; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Matroska MKV/MKA. </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MP4/MOV. </li></ul> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Main features: </span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3D Blu-ray support;</li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">UHD, HDR10, HDR10+ and Dolby Vision support; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Automatic or manual fps adjustment while mixing; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Level changing as well as SEI, SPS/PPS elements and NAL unit delimiter cycle insertion while mixing H.264; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Audio tracks and subtitles time shifting; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to extract DTS core from DTS-HD; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to extract AC3 core from True-HD; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to join files; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to adjust fps for subtitles; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to convert LPCM streams into WAVE and vice versa; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Track language information injection into blu-ray structure and TS header; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to cut source files; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to split output file; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to detect audio delay for TS/M2TS/MPG/VOB/EVO sources; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to remove pulldown info from stream; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to open Blu-ray playlist (MPLS) files; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ability to convert SRT subtitles to PGS; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Tags for SRT subtitles support - tags for changing font, color, size, etc.; tag's syntax is similar to HTML; </li> -<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">United cross-platform GUI - Windows, Linux, MacOS. </li></ul></body></html> +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> @@ -2848,16 +2794,13 @@ p, li { white-space: pre-wrap; } - + false true - - false - Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -2886,16 +2829,6 @@ p, li { white-space: pre-wrap; } 0 - - - English - - - - - Русский - - @@ -2932,6 +2865,12 @@ p, li { white-space: pre-wrap; } + + + 0 + 0 + + 128 @@ -2940,7 +2879,7 @@ p, li { white-space: pre-wrap; } - 128 + 256 16777215