Added Encoding Presets to GuiRenderSettings and removed Checkbox for Custom Resolution
This commit is contained in:
@@ -63,7 +63,6 @@ public class GuiConstants {
|
|||||||
|
|
||||||
public static final int RENDER_SETTINGS_RENDER_BUTTON = 9002;
|
public static final int RENDER_SETTINGS_RENDER_BUTTON = 9002;
|
||||||
public static final int RENDER_SETTINGS_CANCEL_BUTTON = 9003;
|
public static final int RENDER_SETTINGS_CANCEL_BUTTON = 9003;
|
||||||
public static final int RENDER_SETTINGS_RESOLUTION_CHECKBOX = 9004;
|
|
||||||
public static final int RENDER_SETTINGS_INTERPOLATION_BUTTON = 9007;
|
public static final int RENDER_SETTINGS_INTERPOLATION_BUTTON = 9007;
|
||||||
public static final int RENDER_SETTINGS_FORCECHUNKS_BUTTON = 9008;
|
public static final int RENDER_SETTINGS_FORCECHUNKS_BUTTON = 9008;
|
||||||
public static final int RENDER_SETTINGS_FRAMERATE_SLIDER = 9009;
|
public static final int RENDER_SETTINGS_FRAMERATE_SLIDER = 9009;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import eu.crushedpixel.replaymod.gui.elements.*;
|
|||||||
import eu.crushedpixel.replaymod.gui.elements.listeners.SelectionListener;
|
import eu.crushedpixel.replaymod.gui.elements.listeners.SelectionListener;
|
||||||
import eu.crushedpixel.replaymod.holders.GuiEntryListEntry;
|
import eu.crushedpixel.replaymod.holders.GuiEntryListEntry;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||||
|
import eu.crushedpixel.replaymod.settings.EncodingPreset;
|
||||||
import eu.crushedpixel.replaymod.settings.RenderOptions;
|
import eu.crushedpixel.replaymod.settings.RenderOptions;
|
||||||
import eu.crushedpixel.replaymod.utils.MouseUtils;
|
import eu.crushedpixel.replaymod.utils.MouseUtils;
|
||||||
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
|
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
|
||||||
@@ -18,6 +19,7 @@ import net.minecraft.client.resources.I18n;
|
|||||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||||
import net.minecraftforge.fml.client.config.GuiCheckBox;
|
import net.minecraftforge.fml.client.config.GuiCheckBox;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
import org.lwjgl.util.Point;
|
import org.lwjgl.util.Point;
|
||||||
|
|
||||||
@@ -34,16 +36,16 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
//for default file
|
//for default file
|
||||||
private static final String DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss";
|
private static final String DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss";
|
||||||
private static final SimpleDateFormat FILE_FORMAT = new SimpleDateFormat(DATE_FORMAT);
|
private static final SimpleDateFormat FILE_FORMAT = new SimpleDateFormat(DATE_FORMAT);
|
||||||
private static final String WEBM_EXTENSION = ".webm";
|
|
||||||
|
|
||||||
private static final int LEFT_BORDER = 10;
|
private static final int LEFT_BORDER = 10;
|
||||||
|
|
||||||
private GuiAdvancedButton renderButton, cancelButton, advancedButton;
|
private GuiAdvancedButton renderButton, cancelButton, advancedButton;
|
||||||
private GuiDropdown<RendererSettings> rendererDropdown;
|
private GuiDropdown<RendererSettings> rendererDropdown;
|
||||||
|
private GuiDropdown<EncodingPreset> encodingPresetDropdown;
|
||||||
|
|
||||||
private int virtualY, virtualHeight;
|
private int virtualY, virtualHeight;
|
||||||
|
|
||||||
private GuiCheckBox customResolution, ignoreCamDir, enableGreenscreen;
|
private GuiCheckBox ignoreCamDir, enableGreenscreen;
|
||||||
private GuiNumberInput xRes, yRes;
|
private GuiNumberInput xRes, yRes;
|
||||||
private GuiToggleButton interpolation, forceChunks;
|
private GuiToggleButton interpolation, forceChunks;
|
||||||
private GuiVideoFramerateSlider framerateSlider;
|
private GuiVideoFramerateSlider framerateSlider;
|
||||||
@@ -79,12 +81,17 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
encodingPresetDropdown = new GuiDropdown<EncodingPreset>(fontRendererObj, 0, 0, 200, 5);
|
||||||
|
encodingPresetDropdown.addSelectionListener(new EncodingDropdownListener());
|
||||||
|
|
||||||
|
for (EncodingPreset preset : EncodingPreset.values()) {
|
||||||
|
encodingPresetDropdown.addElement(preset);
|
||||||
|
}
|
||||||
|
|
||||||
renderButton = new GuiAdvancedButton(GuiConstants.RENDER_SETTINGS_RENDER_BUTTON, 0, 0, I18n.format("replaymod.gui.render"));
|
renderButton = new GuiAdvancedButton(GuiConstants.RENDER_SETTINGS_RENDER_BUTTON, 0, 0, I18n.format("replaymod.gui.render"));
|
||||||
cancelButton = new GuiAdvancedButton(GuiConstants.RENDER_SETTINGS_CANCEL_BUTTON, 0, 0, I18n.format("replaymod.gui.cancel"));
|
cancelButton = new GuiAdvancedButton(GuiConstants.RENDER_SETTINGS_CANCEL_BUTTON, 0, 0, I18n.format("replaymod.gui.cancel"));
|
||||||
advancedButton = new GuiAdvancedButton(GuiConstants.RENDER_SETTINGS_ADVANCED_BUTTON, 0, 0, I18n.format("replaymod.gui.rendersettings.advanced"));
|
advancedButton = new GuiAdvancedButton(GuiConstants.RENDER_SETTINGS_ADVANCED_BUTTON, 0, 0, I18n.format("replaymod.gui.rendersettings.advanced"));
|
||||||
|
|
||||||
customResolution = new GuiCheckBox(GuiConstants.RENDER_SETTINGS_RESOLUTION_CHECKBOX, 0, 0, I18n.format("replaymod.gui.rendersettings.customresolution"), false);
|
|
||||||
|
|
||||||
xRes = new GuiNumberInput(fontRendererObj, 0, 0, 50, 1, 100000, mc.displayWidth, false) {
|
xRes = new GuiNumberInput(fontRendererObj, 0, 0, 50, 1, 100000, mc.displayWidth, false) {
|
||||||
@Override
|
@Override
|
||||||
public void moveCursorBy(int move) {
|
public void moveCursorBy(int move) {
|
||||||
@@ -124,8 +131,6 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
|
|
||||||
bitrateInput = new GuiNumberInputWithText(fontRendererObj, 0, 0, 50, 1D, null, 10000D, false, " kbps");
|
bitrateInput = new GuiNumberInputWithText(fontRendererObj, 0, 0, 50, 1D, null, 10000D, false, " kbps");
|
||||||
|
|
||||||
xRes.setElementEnabled(false);
|
|
||||||
yRes.setElementEnabled(false);
|
|
||||||
bitrateInput.setElementEnabled(true);
|
bitrateInput.setElementEnabled(true);
|
||||||
|
|
||||||
framerateSlider = new GuiVideoFramerateSlider(GuiConstants.RENDER_SETTINGS_FRAMERATE_SLIDER, 0, 0, ReplayMod.replaySettings.getVideoFramerate(),
|
framerateSlider = new GuiVideoFramerateSlider(GuiConstants.RENDER_SETTINGS_FRAMERATE_SLIDER, 0, 0, ReplayMod.replaySettings.getVideoFramerate(),
|
||||||
@@ -133,7 +138,7 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
|
|
||||||
File defaultFile = null;
|
File defaultFile = null;
|
||||||
try {
|
try {
|
||||||
defaultFile = new File(ReplayFileIO.getRenderFolder(), FILE_FORMAT.format(Calendar.getInstance().getTime())+WEBM_EXTENSION);
|
defaultFile = new File(ReplayFileIO.getRenderFolder(), FILE_FORMAT.format(Calendar.getInstance().getTime())+"."+ EncodingPreset.MP4DEFAULT.getFileExtension());
|
||||||
} catch(IOException ioe) {
|
} catch(IOException ioe) {
|
||||||
ioe.printStackTrace();
|
ioe.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -171,11 +176,12 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
ignoreCamDir = new GuiCheckBox(GuiConstants.RENDER_SETTINGS_STATIC_CAMERA, 0, 0, I18n.format("replaymod.gui.rendersettings.stablecamera"), false);
|
ignoreCamDir = new GuiCheckBox(GuiConstants.RENDER_SETTINGS_STATIC_CAMERA, 0, 0, I18n.format("replaymod.gui.rendersettings.stablecamera"), false);
|
||||||
ignoreCamDir.enabled = false;
|
ignoreCamDir.enabled = false;
|
||||||
|
|
||||||
|
encodingPresetDropdown.setSelectionIndex(0);
|
||||||
|
|
||||||
permanentButtons.add(advancedButton);
|
permanentButtons.add(advancedButton);
|
||||||
permanentButtons.add(renderButton);
|
permanentButtons.add(renderButton);
|
||||||
permanentButtons.add(cancelButton);
|
permanentButtons.add(cancelButton);
|
||||||
|
|
||||||
defaultButtons.add(customResolution);
|
|
||||||
defaultButtons.add(framerateSlider);
|
defaultButtons.add(framerateSlider);
|
||||||
defaultButtons.add(ignoreCamDir);
|
defaultButtons.add(ignoreCamDir);
|
||||||
defaultButtons.add(outputFileChooser);
|
defaultButtons.add(outputFileChooser);
|
||||||
@@ -199,16 +205,22 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
|
|
||||||
w1 = rendererDropdown.width + fontRendererObj.getStringWidth(I18n.format("replaymod.gui.rendersettings.renderer") + ":")+10;
|
w1 = rendererDropdown.width + fontRendererObj.getStringWidth(I18n.format("replaymod.gui.rendersettings.renderer") + ":")+10;
|
||||||
rendererDropdown.yPosition = virtualY + 15 + 15;
|
rendererDropdown.yPosition = virtualY + 15 + 15;
|
||||||
rendererDropdown.xPosition = (width-w1)/2 + fontRendererObj.getStringWidth(I18n.format("replaymod.gui.rendersettings.renderer") + ":")+10;
|
rendererDropdown.xPosition = encodingPresetDropdown.xPosition =
|
||||||
|
(width-w1)/2 + fontRendererObj.getStringWidth(I18n.format("replaymod.gui.rendersettings.renderer") + ":")+10;
|
||||||
|
|
||||||
int w2 = customResolution.width + 5 + xRes.width + 5 + fontRendererObj.getStringWidth("*") + 5 + yRes.width;
|
encodingPresetDropdown.yPosition = rendererDropdown.yPosition + 20 + 10;
|
||||||
|
|
||||||
customResolution.yPosition = virtualY + 15 + 5 + 20 + 10 +5+fontRendererObj.getStringWidth("*")+5;
|
String customResString = I18n.format("replaymod.gui.rendersettings.customresolution");
|
||||||
customResolution.xPosition = (width- w2)/2;
|
int customResWidth = fontRendererObj.getStringWidth(customResString);
|
||||||
|
|
||||||
xRes.xPosition = customResolution.xPosition + customResolution.width + 5;
|
int w2 = customResWidth + 5 + xRes.width + 5 + fontRendererObj.getStringWidth("*") + 5 + yRes.width;
|
||||||
|
|
||||||
|
int yPos = virtualY + 15 + 5 + 50 + 10 + 5+fontRendererObj.getStringWidth("*")+5;
|
||||||
|
int xPos = (width- w2)/2;
|
||||||
|
|
||||||
|
xRes.xPosition = xPos + customResWidth + 5;
|
||||||
yRes.xPosition = xRes.xPosition+xRes.width+5+fontRendererObj.getStringWidth("*")+5;
|
yRes.xPosition = xRes.xPosition+xRes.width+5+fontRendererObj.getStringWidth("*")+5;
|
||||||
xRes.yPosition = yRes.yPosition = customResolution.yPosition-3;
|
xRes.yPosition = yRes.yPosition = yPos-3;
|
||||||
|
|
||||||
int w3 = interpolation.width + 10 + forceChunks.width;
|
int w3 = interpolation.width + 10 + forceChunks.width;
|
||||||
|
|
||||||
@@ -281,16 +293,26 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
|
|
||||||
if(!advancedTab) {
|
if(!advancedTab) {
|
||||||
this.drawString(fontRendererObj, I18n.format("replaymod.gui.rendersettings.renderer") + ":",
|
this.drawString(fontRendererObj, I18n.format("replaymod.gui.rendersettings.renderer") + ":",
|
||||||
(width - w1) / 2, rendererDropdown.yPosition + 8, Color.WHITE.getRGB());
|
(width - w1) / 2, rendererDropdown.yPosition + 6, Color.WHITE.getRGB());
|
||||||
|
|
||||||
|
this.drawString(fontRendererObj, I18n.format("replaymod.gui.rendersettings.presets") + ":",
|
||||||
|
(width - w1) / 2, encodingPresetDropdown.yPosition + 6, Color.WHITE.getRGB());
|
||||||
|
|
||||||
|
String resString = I18n.format("replaymod.gui.rendersettings.customresolution")+":";
|
||||||
|
int strWidth = fontRendererObj.getStringWidth(resString);
|
||||||
|
|
||||||
|
this.drawString(fontRendererObj, resString,
|
||||||
|
xRes.xPosition - strWidth - 5, xRes.yPosition+6, Color.WHITE.getRGB());
|
||||||
|
|
||||||
xRes.drawTextBox();
|
xRes.drawTextBox();
|
||||||
yRes.drawTextBox();
|
yRes.drawTextBox();
|
||||||
bitrateInput.drawTextBox();
|
bitrateInput.drawTextBox();
|
||||||
this.drawString(fontRendererObj, "*", xRes.xPosition + xRes.width + 5, xRes.yPosition + 3, Color.WHITE.getRGB());
|
this.drawString(fontRendererObj, "*", xRes.xPosition + xRes.width + 5, xRes.yPosition + 6, Color.WHITE.getRGB());
|
||||||
|
|
||||||
String bitrateString = I18n.format("replaymod.gui.settings.bitrate")+": ";
|
String bitrateString = I18n.format("replaymod.gui.settings.bitrate")+": ";
|
||||||
this.drawString(fontRendererObj, bitrateString, forceChunks.xPosition, bitrateInput.yPosition + 6, Color.WHITE.getRGB());
|
this.drawString(fontRendererObj, bitrateString, forceChunks.xPosition, bitrateInput.yPosition + 6, Color.WHITE.getRGB());
|
||||||
|
|
||||||
|
encodingPresetDropdown.drawTextBox();
|
||||||
rendererDropdown.drawTextBox();
|
rendererDropdown.drawTextBox();
|
||||||
} else {
|
} else {
|
||||||
commandInput.drawTextBox();
|
commandInput.drawTextBox();
|
||||||
@@ -310,6 +332,7 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
@Override
|
@Override
|
||||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
|
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
|
||||||
if(!rendererDropdown.mouseClickedResult(mouseX, mouseY)) {
|
if(!rendererDropdown.mouseClickedResult(mouseX, mouseY)) {
|
||||||
|
if(!encodingPresetDropdown.mouseClickedResult(mouseX, mouseY)) {
|
||||||
if(!advancedTab) {
|
if(!advancedTab) {
|
||||||
xRes.mouseClicked(mouseX, mouseY, mouseButton);
|
xRes.mouseClicked(mouseX, mouseY, mouseButton);
|
||||||
yRes.mouseClicked(mouseX, mouseY, mouseButton);
|
yRes.mouseClicked(mouseX, mouseY, mouseButton);
|
||||||
@@ -334,6 +357,7 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void mouseReleased(int mouseX, int mouseY, int state) {
|
protected void mouseReleased(int mouseX, int mouseY, int state) {
|
||||||
@@ -350,10 +374,10 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
protected void keyTyped(char typedChar, int keyCode) throws IOException {
|
protected void keyTyped(char typedChar, int keyCode) throws IOException {
|
||||||
if(!advancedTab) {
|
if(!advancedTab) {
|
||||||
if(keyCode == Keyboard.KEY_TAB) {
|
if(keyCode == Keyboard.KEY_TAB) {
|
||||||
if(xRes.isFocused() && customResolution.isChecked()) {
|
if(xRes.isFocused()) {
|
||||||
xRes.setFocused(false);
|
xRes.setFocused(false);
|
||||||
yRes.setFocused(true);
|
yRes.setFocused(true);
|
||||||
} else if(yRes.isFocused() && customResolution.isChecked()) {
|
} else if(yRes.isFocused()) {
|
||||||
yRes.setFocused(false);
|
yRes.setFocused(false);
|
||||||
xRes.setFocused(true);
|
xRes.setFocused(true);
|
||||||
}
|
}
|
||||||
@@ -400,11 +424,7 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
} else if(defaultButtons.contains(button) && !advancedTab) {
|
} else if(defaultButtons.contains(button) && !advancedTab) {
|
||||||
if(button instanceof GuiCheckBox)
|
if(button instanceof GuiCheckBox)
|
||||||
((GuiCheckBox)button).setIsChecked(!((GuiCheckBox)button).isChecked());
|
((GuiCheckBox)button).setIsChecked(!((GuiCheckBox)button).isChecked());
|
||||||
if(button.id == GuiConstants.RENDER_SETTINGS_RESOLUTION_CHECKBOX) {
|
else if(button.id == GuiConstants.RENDER_SETTINGS_OUTPUT_CHOOSER) {
|
||||||
boolean enabled = customResolution.isChecked();
|
|
||||||
xRes.setElementEnabled(enabled);
|
|
||||||
yRes.setElementEnabled(enabled);
|
|
||||||
} else if(button.id == GuiConstants.RENDER_SETTINGS_OUTPUT_CHOOSER) {
|
|
||||||
Point mouse = MouseUtils.getMousePos();
|
Point mouse = MouseUtils.getMousePos();
|
||||||
outputFileChooser.mouseClick(mc, mouse.getX(), mouse.getY(), 0);
|
outputFileChooser.mouseClick(mc, mouse.getX(), mouse.getY(), 0);
|
||||||
}
|
}
|
||||||
@@ -468,7 +488,10 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
|
|
||||||
options.setBitrate(bitrateInput.getIntValue() + "K"); //Bitrate value is in Kilobytes
|
options.setBitrate(bitrateInput.getIntValue() + "K"); //Bitrate value is in Kilobytes
|
||||||
|
|
||||||
|
//remove the extension from the output file
|
||||||
File outputFile = outputFileChooser.getSelectedFile();
|
File outputFile = outputFileChooser.getSelectedFile();
|
||||||
|
outputFile = new File(outputFile.getParent(), FilenameUtils.getBaseName(outputFile.getAbsolutePath()));
|
||||||
|
|
||||||
if(outputFile.exists()) FileUtils.deleteQuietly(outputFile);
|
if(outputFile.exists()) FileUtils.deleteQuietly(outputFile);
|
||||||
options.setOutputFile(outputFile);
|
options.setOutputFile(outputFile);
|
||||||
|
|
||||||
@@ -546,6 +569,24 @@ public class GuiRenderSettings extends GuiScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class EncodingDropdownListener implements SelectionListener {
|
||||||
|
@Override
|
||||||
|
public void onSelectionChanged(int selectionIndex) {
|
||||||
|
EncodingPreset preset = encodingPresetDropdown.getElement(selectionIndex);
|
||||||
|
|
||||||
|
bitrateInput.setEnabled(preset.hasBitrateSetting());
|
||||||
|
ffmpegArguments.setText(preset.getCommandLineArgs());
|
||||||
|
|
||||||
|
outputFileChooser.setAllowedExtensions(new String[]{preset.getFileExtension()});
|
||||||
|
|
||||||
|
File selectedFile = outputFileChooser.getSelectedFile();
|
||||||
|
if(selectedFile != null) {
|
||||||
|
String newName = FilenameUtils.getBaseName(selectedFile.getAbsolutePath())+"."+preset.getFileExtension();
|
||||||
|
outputFileChooser.setSelectedFile(new File(selectedFile.getParent(), newName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onGuiClosed() {
|
public void onGuiClosed() {
|
||||||
Keyboard.enableRepeatEvents(false);
|
Keyboard.enableRepeatEvents(false);
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package eu.crushedpixel.replaymod.settings;
|
||||||
|
|
||||||
|
import eu.crushedpixel.replaymod.holders.GuiEntryListEntry;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import net.minecraft.client.resources.I18n;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum EncodingPreset implements GuiEntryListEntry {
|
||||||
|
|
||||||
|
MP4DEFAULT("replaymod.gui.rendersettings.presets.mp4.default",
|
||||||
|
"-f rawvideo -pix_fmt argb -s %WIDTH%x%HEIGHT% -r %FPS% -i - -an -c:v libx264 -preset ultrafast -pix_fmt yuv420p %FILENAME%.mp4", "mp4"),
|
||||||
|
|
||||||
|
MP4CUSTOM("replaymod.gui.rendersettings.presets.mp4.custom",
|
||||||
|
"-f rawvideo -pix_fmt argb -s %WIDTH%x%HEIGHT% -r %FPS% -i - -an -c:v libx264 -b:v %BITRATE% -pix_fmt yuv420p %FILENAME%.mp4", "mp4"),
|
||||||
|
|
||||||
|
MP4POTATO("replaymod.gui.rendersettings.presets.mp4.potato",
|
||||||
|
"-f rawvideo -pix_fmt argb -s %WIDTH%x%HEIGHT% -r %FPS% -i - -an -c:v libx264 -preset ultrafast -crf 51 -pix_fmt yuv420p %FILENAME%.mp4", "mp4"),
|
||||||
|
|
||||||
|
MKVLOSSLESS("replaymod.gui.rendersettings.presets.mkv.lossless",
|
||||||
|
"-f rawvideo -pix_fmt argb -s %WIDTH%x%HEIGHT% -r %FPS% -i - -an -c:v libx264 -preset ultrafast -qp 0 %FILENAME%.mkv", "mkv"),
|
||||||
|
|
||||||
|
WEBMCUSTOM("replaymod.gui.rendersettings.presets.webm.custom",
|
||||||
|
"-f rawvideo -pix_fmt argb -s %WIDTH%x%HEIGHT% -r %FPS% -i - -an -c:v libvpx -b:v %BITRATE% %FILENAME%.webm", "webm");
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private String commandLineArgs;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private String fileExtension;
|
||||||
|
|
||||||
|
public boolean hasBitrateSetting() {
|
||||||
|
return commandLineArgs.contains("%BITRATE%");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayString() {
|
||||||
|
return getI18nName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getI18nName() {
|
||||||
|
return I18n.format(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,9 +27,7 @@ public final class RenderOptions {
|
|||||||
|
|
||||||
// Highly advanced
|
// Highly advanced
|
||||||
private String exportCommand = "ffmpeg";
|
private String exportCommand = "ffmpeg";
|
||||||
private String exportCommandArgs = "-f rawvideo -pix_fmt argb -s %WIDTH%x%HEIGHT% -r %FPS% -i - " +
|
private String exportCommandArgs = "";
|
||||||
"-an " +
|
|
||||||
"-c:v libvpx -b:v %BITRATE% %FILENAME%";
|
|
||||||
|
|
||||||
public int getFps() {
|
public int getFps() {
|
||||||
return fps;
|
return fps;
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ replaymod.gui.rendersettings.renderer.stereoscopic.description=Renders the video
|
|||||||
replaymod.gui.rendersettings.renderer.cubic.description=Renders the video with a 360 degree panoramic view, using Cubic Projection. This is useable by several 360 degree video players (and the Oculus Rift), for example VR Player.
|
replaymod.gui.rendersettings.renderer.cubic.description=Renders the video with a 360 degree panoramic view, using Cubic Projection. This is useable by several 360 degree video players (and the Oculus Rift), for example VR Player.
|
||||||
replaymod.gui.rendersettings.renderer.equirectangular.description=Renders the video with a 360 degree panoramic view, using Equirectangular Projection. This is useable by YouTube's new 360 degree video function, and several video players (and the Oculus Rift), for example VR Player.
|
replaymod.gui.rendersettings.renderer.equirectangular.description=Renders the video with a 360 degree panoramic view, using Equirectangular Projection. This is useable by YouTube's new 360 degree video function, and several video players (and the Oculus Rift), for example VR Player.
|
||||||
|
|
||||||
replaymod.gui.rendersettings.customresolution=Custom Video Resolution
|
replaymod.gui.rendersettings.customresolution=Video Resolution
|
||||||
replaymod.gui.rendersettings.customresolution.warning.cubic=Cubic Rendering requires an aspect ratio of 4:3
|
replaymod.gui.rendersettings.customresolution.warning.cubic=Cubic Rendering requires an aspect ratio of 4:3
|
||||||
replaymod.gui.rendersettings.customresolution.warning.equirectangular=Equirectangular Rendering requires an aspect ratio of 2:1
|
replaymod.gui.rendersettings.customresolution.warning.equirectangular=Equirectangular Rendering requires an aspect ratio of 2:1
|
||||||
replaymod.gui.rendersettings.resolution=Video Resolution
|
replaymod.gui.rendersettings.resolution=Video Resolution
|
||||||
@@ -328,6 +328,13 @@ replaymod.gui.rendersettings.exportyoutube=Export for YouTube
|
|||||||
replaymod.gui.rendersettings.basic=Basic Settings
|
replaymod.gui.rendersettings.basic=Basic Settings
|
||||||
replaymod.gui.rendersettings.advanced=Advanced Settings
|
replaymod.gui.rendersettings.advanced=Advanced Settings
|
||||||
|
|
||||||
|
replaymod.gui.rendersettings.presets=Encoding Presets
|
||||||
|
replaymod.gui.rendersettings.presets.mp4.default=MP4 - Default
|
||||||
|
replaymod.gui.rendersettings.presets.mp4.custom=MP4 - Custom Bitrate
|
||||||
|
replaymod.gui.rendersettings.presets.mp4.potato=MP4 - Potato
|
||||||
|
replaymod.gui.rendersettings.presets.mkv.lossless=MKV - Lossless
|
||||||
|
replaymod.gui.rendersettings.presets.webm.custom=WEBM - Custom Bitrate
|
||||||
|
|
||||||
#Rendering GUI
|
#Rendering GUI
|
||||||
replaymod.gui.rendering.title=Rendering Video
|
replaymod.gui.rendering.title=Rendering Video
|
||||||
replaymod.gui.rendering.pause=Pause Rendering
|
replaymod.gui.rendering.pause=Pause Rendering
|
||||||
|
|||||||
Reference in New Issue
Block a user