Skip to content

DTTConvert 1.0.0

Choose a tag to compare

@Hxrmfull Hxrmfull released this 05 Aug 21:27
· 49 commits to main since this release

What's new

Added

  • Discord stickers and emoji: static PNG and animated APNG 320×320
    for stickers, PNG and GIF 128×128 for emoji. APNG keeps full 8-bit
    semi-transparency, so soft edges don't turn into a fringe.
  • Twitch emotes: PNG and GIF, single size or a 28/56/112 set.
  • Telegram stickers and emoji to the official spec: static PNG/WEBP,
    video WEBM/VP9 up to 3 seconds and 256 KB.
  • Audio: extract the track to MP3, M4A (AAC) or WAV, pick the bitrate,
    "remove audio" toggle. Trimming works for audio too.
  • APNG as an output format: unlike GIF, it keeps all colours and
    semi-transparency.
  • English interface, switched on the fly — the queue, settings and
    selected preset are kept.
  • Quality slider (1–100) and a "fit into size" mode: the bitrate is
    chosen to hit the given number of megabytes.
  • Rotation by 90/180/270° and flipping, including on top of platform presets.
  • Checkboxes in the queue: only checked files are processed.
  • Trimming is set by start and end rather than start and length.
  • CSV report, remaining time estimate, a notification when the window
    is minimised.
  • A log file and an error window instead of crashing silently.

Changed

  • Animated WEBP, AVIF and APNG are detected by file contents, not by
    extension: 7TV and BetterTTV emotes convert just like video, keeping
    the original speed and semi-transparency.
  • The intermediate format for animation is MOV with the qtrle codec
    instead of GIF: GIF has 1-bit alpha, and semi-transparent edges turned
    into a ragged fringe. Measured: via GIF 2 % of semi-transparent pixels
    survived, via qtrle — 52 %.
  • Thumbnails and file durations are computed in the background. Adding
    a folder of 200 photos: 7.14 s before, 0.16 s now.
  • The queue is processed in parallel: images in four threads, video
    in two — FFmpeg already uses all cores.
  • The build moved from --onefile to --onedir: the exe no longer unpacks
    itself into a temp folder on every start, so it starts faster and
    triggers fewer antivirus false positives.
  • All processing options are on one tab; the selected format is not
    reset when switching tabs.
  • Quality and "fit into size" are shown only where they work: JPG, WEBP,
    AVIF and video. PNG, BMP, GIF, APNG and audio have nothing to tune,
    and these fields used to silently do nothing there.

Fixed

  • The source file is never overwritten by the result — even with
    overwriting on and the same folder. An animated WEBP used to
    overwrite itself.
  • The format list lost the JPG item after a language switch if a
    platform preset was selected.
  • A language switch lost a multi-file selection and a chosen but not yet
    applied format: "Apply to all" used the old one.
  • Frame export of two files with the same name from different folders
    wrote into one folder, overwriting each other.
  • An interrupted file stayed in the "Processing" state forever with
    a frozen percentage.
  • Thumbnails are prepared as QImage: QPixmap is a paint device, and Qt
    does not promise it works outside the GUI thread.
  • The queue worker got an owner: the thread object could be destroyed
    while the thread was still running.
  • Cyrillic file names no longer break conversion.

Что нового

Добавлено

  • Стикеры и эмодзи Discord: статичный PNG и анимированный APNG 320×320
    для стикеров, PNG и GIF 128×128 для эмодзи. У APNG полноценная 8-битная
    полупрозрачность, поэтому мягкие края не превращаются в кайму.
  • Смайлики Twitch: PNG и GIF, поштучно и комплектом 28/56/112.
  • Стикеры и эмодзи Telegram по официальной спецификации: статика
    PNG/WEBP, видео WEBM/VP9 до 3 секунд и 256 КБ.
  • Звук: извлечение дорожки в MP3, M4A (AAC) и WAV, выбор битрейта,
    тумблер «убрать звук». Обрезка по времени работает и для звука.
  • APNG как выходной формат: в отличие от GIF, сохраняет все цвета
    и полупрозрачность.
  • Английский язык интерфейса, переключается на лету — очередь,
    настройки и выбранный пресет при этом сохраняются.
  • Ползунок качества (1–100) и режим «уложить в размер»: битрейт
    подбирается под заданное число мегабайт.
  • Поворот на 90/180/270° и отражение, в том числе поверх пресетов площадок.
  • Галочки в очереди: обрабатываются только отмеченные файлы.
  • Обрезка по времени задаётся началом и концом, а не началом и длиной.
  • Отчёт о выполнении в CSV, оценка оставшегося времени, уведомление,
    когда окно свёрнуто.
  • Журнал работы и окно с текстом ошибки вместо молчаливого падения.

Изменено

  • Анимированные WEBP, AVIF и APNG распознаются по содержимому файла,
    а не по расширению: эмодзи с 7TV и BetterTTV конвертируются наравне
    с видео, с сохранением исходной скорости и полупрозрачности.
  • Промежуточный формат для анимации — MOV с кодеком qtrle вместо GIF:
    у GIF альфа однобитная, и полупрозрачные края превращались в рваную кайму.
    Замерено: через GIF полупрозрачных пикселей оставалось 2 %, через qtrle — 52 %.
  • Миниатюры и длительность файлов считаются в фоне. Добавление папки
    на 200 снимков: было 7,14 секунды, стало 0,16.
  • Очередь обрабатывается параллельно: картинки в четыре потока, видео
    в два — FFmpeg и так занимает все ядра.
  • Сборка перешла с --onefile на --onedir: exe больше не распаковывает
    себя во временную папку при каждом запуске, отсюда быстрый старт
    и меньше ложных срабатываний антивирусов.
  • Все параметры обработки собраны на одной вкладке; выбранный формат
    не сбрасывается при переходе между вкладками.
  • Качество и «уложить в размер» показываются только там, где работают:
    у JPG, WEBP, AVIF и видео. У PNG, BMP, GIF, APNG и звука подкручивать
    нечего, и раньше эти поля молча ничего не делали.

Исправлено

  • Исходный файл больше никогда не перезаписывается результатом — даже при
    включённой перезаписи и совпадении папок. Анимированный WEBP до этого
    затирал сам себя.
  • Список форматов терял пункт JPG при смене языка, если был выбран пресет
    площадки.
  • Смена языка теряла выделение нескольких файлов и выбранный, но ещё
    не применённый формат: «Применить ко всем» срабатывало со старым.
  • Покадровый разбор двух одноимённых файлов из разных папок писал кадры
    в одну папку, затирая предыдущие.
  • Прерванный файл навсегда оставался в состоянии «Обработка» с зависшим
    процентом.
  • Миниатюры готовятся как QImage: QPixmap — устройство отрисовки, и Qt
    не обещает, что оно работает вне потока интерфейса.
  • Обработчик очереди получил владельца: объект потока мог уничтожиться,
    пока поток ещё выполнялся.
  • Кириллица в именах файлов больше не роняет конвертацию.