/***
Olive - Non-Linear Video Editor
Copyright (C) 2021 Olive Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
***/
#include "subtitleparams.h"
#include
namespace olive {
QString SubtitleParams::GenerateASSHeader()
{
// NOTE: We'll probably implement more customization as we support ASS better. Right now, we only
// natively support SRT and only make this header because FFmpeg requires it.
static const int kAssDefaultPlayResX = 384;
static const int kAssDefaultPlayResY = 288;
static const QString kAssDefaultFont = QStringLiteral("Arial");
static const int kAssDefaultFontSize = 16;
static const int kAssDefaultPrimaryColor = 0xFFFFFF; // White
static const int kAssDefaultSecondaryColor = 0xFFFFFF; // White
static const int kAssDefaultOutlineColor = 0x000000; // Black
static const int kAssDefaultBackColor = 0x000000; // Black
static const int kAssBold = 0;
static const int kAssItalic = 0;
static const int kAssUnderline = 0;
static const int kAssStrike = 0;
static const int kAssBorderStyle = 1;
static const int kAssAlignment = 2;
QString ass_code;
// Header info
ass_code.append(QStringLiteral("[Script Info]\r\n"));
ass_code.append(QStringLiteral("; Script generated by %1 %2\r\n").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion()));
ass_code.append(QStringLiteral("ScriptType: v4.00+\r\n"));
ass_code.append(QStringLiteral("PlayResX: %1\r\n").arg(QString::number(kAssDefaultPlayResX)));
ass_code.append(QStringLiteral("PlayResY: %1\r\n").arg(QString::number(kAssDefaultPlayResY)));
ass_code.append(QStringLiteral("ScaledBorderAndShadow: yes\r\n"));
ass_code.append(QStringLiteral("\r\n"));
// ASSv4 header
ass_code.append(QStringLiteral("[V4+ Styles]\r\n"));
ass_code.append(QStringLiteral("Format: Name, "));
ass_code.append(QStringLiteral("Fontname, Fontsize, "));
ass_code.append(QStringLiteral("PrimaryColour, SecondaryColour, OutlineColour, BackColour, "));
ass_code.append(QStringLiteral("Bold, Italic, Underline, StrikeOut, "));
ass_code.append(QStringLiteral("ScaleX, ScaleY, "));
ass_code.append(QStringLiteral("Spacing, Angle, "));
ass_code.append(QStringLiteral("BorderStyle, Outline, Shadow, "));
ass_code.append(QStringLiteral("Alignment, MarginL, MarginR, MarginV, "));
ass_code.append(QStringLiteral("Encoding\r\n"));
ass_code.append(QStringLiteral("Style: "));
// Name
ass_code.append(QStringLiteral("Default,"));
// Font{name,size}
ass_code.append(QStringLiteral("%1,%2,").arg(kAssDefaultFont, QString::number(kAssDefaultFontSize)));
// {Primary,Secondary,Outline,Back}Colour
ass_code.append(QStringLiteral("&H%1,&H%2,&H%3,&H%4,").arg(QString::number(kAssDefaultPrimaryColor, 16),
QString::number(kAssDefaultSecondaryColor, 16),
QString::number(kAssDefaultOutlineColor, 16),
QString::number(kAssDefaultBackColor, 16)));
// Bold, Italic, Underline, StrikeOut
ass_code.append(QStringLiteral("%1,%2,%3,%4,").arg(QString::number(kAssBold),
QString::number(kAssItalic),
QString::number(kAssUnderline),
QString::number(kAssStrike)));
// Scale{X,Y}
ass_code.append(QStringLiteral("100,100,"));
// Spacing, Angle
ass_code.append(QStringLiteral("0,0,"));
// BorderStyle, Outline, Shadow
ass_code.append(QStringLiteral("%1,1,0,").arg(QString::number(kAssBorderStyle)));
// Alignment, Margin[LRV]
ass_code.append(QStringLiteral("%1,10,10,10,").arg(QString::number(kAssAlignment)));
// Encoding
ass_code.append(QStringLiteral("0\r\n"));
ass_code.append(QStringLiteral("\r\n"));
ass_code.append(QStringLiteral("[Events]\r\n"));
ass_code.append(QStringLiteral("Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n"));
return ass_code;
}
}