141 lines
4.1 KiB
Java
141 lines
4.1 KiB
Java
package com.replaymod.render;
|
|
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.Data;
|
|
import lombok.Getter;
|
|
import net.minecraft.client.resources.I18n;
|
|
import org.lwjgl.util.ReadableColor;
|
|
|
|
import java.io.File;
|
|
|
|
@Data
|
|
public class RenderSettings {
|
|
public enum RenderMethod {
|
|
DEFAULT, STEREOSCOPIC, CUBIC, EQUIRECTANGULAR, ODS;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return I18n.format("replaymod.gui.rendersettings.renderer." + name().toLowerCase());
|
|
}
|
|
|
|
public String getDescription() {
|
|
return I18n.format("replaymod.gui.rendersettings.renderer." + name().toLowerCase() + ".description");
|
|
}
|
|
}
|
|
|
|
public enum EncodingPreset {
|
|
MP4_CUSTOM("-an -c:v libx264 -b:v %BITRATE% -pix_fmt yuv420p \"%FILENAME%\"", "mp4"),
|
|
|
|
MP4_HIGH("-an -c:v libx264 -preset ultrafast -qp 1 -pix_fmt yuv420p \"%FILENAME%\"", "mp4"),
|
|
|
|
MP4_DEFAULT("-an -c:v libx264 -preset ultrafast -pix_fmt yuv420p \"%FILENAME%\"", "mp4"),
|
|
|
|
MP4_POTATO("-an -c:v libx264 -preset ultrafast -crf 51 -pix_fmt yuv420p \"%FILENAME%\"", "mp4"),
|
|
|
|
WEBM_CUSTOM("-an -c:v libvpx -b:v %BITRATE% \"%FILENAME%\"", "webm"),
|
|
|
|
MKV_LOSSLESS("-an -c:v libx264 -preset ultrafast -qp 0 \"%FILENAME%\"", "mkv"),
|
|
|
|
PNG("\"%FILENAME%-%06d.png\"", "png");
|
|
|
|
private final String preset;
|
|
private final String fileExtension;
|
|
|
|
EncodingPreset(String preset, String fileExtension) {
|
|
this.preset = preset;
|
|
this.fileExtension = fileExtension;
|
|
}
|
|
|
|
public String getValue() {
|
|
return "-y -f rawvideo -pix_fmt rgb24 -s %WIDTH%x%HEIGHT% -r %FPS% -i - %FILTERS%" + preset;
|
|
}
|
|
|
|
public String getFileExtension() {
|
|
return fileExtension;
|
|
}
|
|
|
|
public boolean hasBitrateSetting() {
|
|
return preset.contains("%BITRATE%");
|
|
}
|
|
|
|
public boolean isYuv420() { return preset.contains("-pix_fmt yuv420p"); }
|
|
|
|
@Override
|
|
public String toString() {
|
|
return I18n.format("replaymod.gui.rendersettings.presets." + name().replace('_', '.').toLowerCase());
|
|
}
|
|
}
|
|
|
|
@AllArgsConstructor
|
|
public enum AntiAliasing {
|
|
NONE(1), X2(2), X4(4), X8(8);
|
|
|
|
@Getter
|
|
private final int factor;
|
|
|
|
@Override
|
|
public String toString() {
|
|
return I18n.format("replaymod.gui.rendersettings.antialiasing." + name().toLowerCase());
|
|
}
|
|
}
|
|
|
|
private final RenderMethod renderMethod;
|
|
private final EncodingPreset encodingPreset;
|
|
private final int videoWidth;
|
|
private final int videoHeight;
|
|
private final int framesPerSecond;
|
|
private final int bitRate;
|
|
private final File outputFile;
|
|
|
|
private final boolean renderNameTags;
|
|
private final boolean stabilizeYaw;
|
|
private final boolean stabilizePitch;
|
|
private final boolean stabilizeRoll;
|
|
private final ReadableColor chromaKeyingColor;
|
|
private final boolean inject360Metadata;
|
|
private final AntiAliasing antiAliasing;
|
|
|
|
private final String exportCommand;
|
|
private final String exportArguments;
|
|
|
|
private final boolean highPerformance;
|
|
|
|
/**
|
|
* @return the width of the output video during rendering, including the upscale for Anti-Aliasing.
|
|
*/
|
|
public int getVideoWidth() {
|
|
return videoWidth * antiAliasing.getFactor();
|
|
}
|
|
|
|
/**
|
|
* @return the height of the output video during rendering, including the upscale for Anti-Aliasing.
|
|
*/
|
|
public int getVideoHeight() {
|
|
return videoHeight * antiAliasing.getFactor();
|
|
}
|
|
|
|
/**
|
|
* @return the actual width of the output video.
|
|
*/
|
|
public int getTargetVideoWidth() {
|
|
return videoWidth;
|
|
}
|
|
|
|
/**
|
|
* @return the actual height of the output video.
|
|
*/
|
|
public int getTargetVideoHeight() {
|
|
return videoHeight;
|
|
}
|
|
|
|
public String getVideoFilters() {
|
|
if (antiAliasing == AntiAliasing.NONE) {
|
|
return "";
|
|
} else {
|
|
double factor = 1.0 / antiAliasing.getFactor();
|
|
return String.format("-vf scale=iw*%1$s:ih*%1$s ", factor);
|
|
}
|
|
}
|
|
|
|
}
|