From 81220a213b932ef7befab3453c1e035b5e6c133d Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Sat, 27 Jul 2024 11:02:59 -0500 Subject: [PATCH] Encode subtitles in output files The user must first add subtitles to the timeline using the subtitle panel --- src/docks/encodedock.cpp | 19 +++++++++++++++++++ src/docks/encodedock.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/docks/encodedock.cpp b/src/docks/encodedock.cpp index 50c49998d9..73b4a0a266 100755 --- a/src/docks/encodedock.cpp +++ b/src/docks/encodedock.cpp @@ -1015,6 +1015,24 @@ void EncodeDock::collectProperties(QDomElement &node, int realtime) delete p; } +void EncodeDock::setSubtitleProperties(QDomElement &node, Mlt::Producer *service) +{ + if (!service) { + return; + } + int subIndex = 0; + for (int i = 0; i < service->filter_count(); i++) { + QScopedPointer filter(service->filter(i)); + if (filter && filter->is_valid() && filter->get("mlt_service") == QString("subtitle_feed")) { + QString key = QString("subtitle.%1.feed").arg(subIndex); + node.setAttribute(key, filter->get("feed")); + key = QString("subtitle.%1.lang").arg(subIndex); + node.setAttribute(key, filter->get("lang")); + subIndex++; + } + } +} + MeltJob *EncodeDock::createMeltJob(Mlt::Producer *service, const QString &target, int realtime, int pass, const QThread::Priority priority) { @@ -1124,6 +1142,7 @@ MeltJob *EncodeDock::createMeltJob(Mlt::Producer *service, const QString &target ui->audioCodecCombo->currentIndex() == 0 && (mytarget.endsWith(".mp4") || mytarget.endsWith(".mov"))) consumerNode.setAttribute("strict", "experimental"); + setSubtitleProperties(consumerNode, service); // Add autoclose to playlists. QDomNodeList playlists = dom.elementsByTagName("playlist"); diff --git a/src/docks/encodedock.h b/src/docks/encodedock.h index f4586529f6..67e5567efa 100755 --- a/src/docks/encodedock.h +++ b/src/docks/encodedock.h @@ -158,6 +158,7 @@ private slots: void loadPresets(); Mlt::Properties *collectProperties(int realtime, bool includeProfile = false); void collectProperties(QDomElement &node, int realtime); + void setSubtitleProperties(QDomElement &node, Mlt::Producer *service); MeltJob *createMeltJob(Mlt::Producer *service, const QString &target, int realtime, int pass = 0, const QThread::Priority priority = Settings.jobPriority()); void runMelt(const QString &target, int realtime = -1);