mirror of
https://github.com/aNNiMON/ffmpegbot
synced 2024-09-19 22:54:20 +03:00
Add contrast, gamma and saturation
This commit is contained in:
parent
3222624b1f
commit
856cd15358
@ -18,12 +18,14 @@ public class FFmpegCommandBuilder implements Visitor<MediaSession> {
|
|||||||
private final List<String> videoCommands;
|
private final List<String> videoCommands;
|
||||||
private final List<String> audioFilters;
|
private final List<String> audioFilters;
|
||||||
private final List<String> videoFilters;
|
private final List<String> videoFilters;
|
||||||
|
private final List<String> eq;
|
||||||
|
|
||||||
public FFmpegCommandBuilder() {
|
public FFmpegCommandBuilder() {
|
||||||
audioCommands = new ArrayList<>();
|
audioCommands = new ArrayList<>();
|
||||||
videoCommands = new ArrayList<>();
|
videoCommands = new ArrayList<>();
|
||||||
audioFilters = new ArrayList<>();
|
audioFilters = new ArrayList<>();
|
||||||
videoFilters = new ArrayList<>();
|
videoFilters = new ArrayList<>();
|
||||||
|
eq = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -80,6 +82,27 @@ public class FFmpegCommandBuilder implements Visitor<MediaSession> {
|
|||||||
audioCommands.add("0:m:language:" + p.getValue());
|
audioCommands.add("0:m:language:" + p.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(Contrast p, MediaSession input) {
|
||||||
|
String value = p.getValue();
|
||||||
|
if (value.equals("1")) return;
|
||||||
|
eq.add("contrast=" + value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(Gamma p, MediaSession input) {
|
||||||
|
String value = p.getValue();
|
||||||
|
if (value.equals("1")) return;
|
||||||
|
eq.add("gamma=" + value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(Saturation p, MediaSession input) {
|
||||||
|
String value = p.getValue();
|
||||||
|
if (value.equals("1")) return;
|
||||||
|
eq.add("saturation=" + value);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(SpeedFactor p, MediaSession input) {
|
public void visit(SpeedFactor p, MediaSession input) {
|
||||||
if (p.getValue().equals("1")) return;
|
if (p.getValue().equals("1")) return;
|
||||||
@ -148,6 +171,9 @@ public class FFmpegCommandBuilder implements Visitor<MediaSession> {
|
|||||||
}
|
}
|
||||||
if (FileTypes.canContainVideo(session.getFileType())) {
|
if (FileTypes.canContainVideo(session.getFileType())) {
|
||||||
commands.addAll(videoCommands);
|
commands.addAll(videoCommands);
|
||||||
|
if (!eq.isEmpty()) {
|
||||||
|
videoFilters.add("eq=" + String.join(":", eq));
|
||||||
|
}
|
||||||
if (!videoFilters.isEmpty()) {
|
if (!videoFilters.isEmpty()) {
|
||||||
commands.add("-vf");
|
commands.add("-vf");
|
||||||
commands.add(String.join(",", videoFilters));
|
commands.add(String.join(",", videoFilters));
|
||||||
|
@ -9,6 +9,9 @@ public interface Visitor<I> {
|
|||||||
void visit(AudioPitch p, I input);
|
void visit(AudioPitch p, I input);
|
||||||
void visit(AudioVolume p, I input);
|
void visit(AudioVolume p, I input);
|
||||||
void visit(AudioStreamByLanguage p, I input);
|
void visit(AudioStreamByLanguage p, I input);
|
||||||
|
void visit(Contrast p, I input);
|
||||||
|
void visit(Gamma p, I input);
|
||||||
|
void visit(Saturation p, I input);
|
||||||
void visit(SpeedFactor p, I input);
|
void visit(SpeedFactor p, I input);
|
||||||
void visit(VideoBitrate p, I input);
|
void visit(VideoBitrate p, I input);
|
||||||
void visit(VideoScale p, I input);
|
void visit(VideoScale p, I input);
|
||||||
|
26
src/main/java/com/annimon/ffmpegbot/parameters/Contrast.java
Normal file
26
src/main/java/com/annimon/ffmpegbot/parameters/Contrast.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package com.annimon.ffmpegbot.parameters;
|
||||||
|
|
||||||
|
import com.annimon.ffmpegbot.commands.ffmpeg.Visitor;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Contrast extends StringParameter {
|
||||||
|
private static final List<String> VALUES = List.of(
|
||||||
|
"0.4", "0.6", "0.8",
|
||||||
|
"1", "1.2", "1.4", "1.6",
|
||||||
|
"1.8", "2"
|
||||||
|
);
|
||||||
|
|
||||||
|
public Contrast() {
|
||||||
|
super("contrast", "Contrast", VALUES, "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int defaultColumnsCount() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <I> void accept(Visitor<I> visitor, I input) {
|
||||||
|
visitor.visit(this, input);
|
||||||
|
}
|
||||||
|
}
|
26
src/main/java/com/annimon/ffmpegbot/parameters/Gamma.java
Normal file
26
src/main/java/com/annimon/ffmpegbot/parameters/Gamma.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package com.annimon.ffmpegbot.parameters;
|
||||||
|
|
||||||
|
import com.annimon.ffmpegbot.commands.ffmpeg.Visitor;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Gamma extends StringParameter {
|
||||||
|
private static final List<String> VALUES = List.of(
|
||||||
|
"0.2", "0.4", "0.6", "0.8",
|
||||||
|
"1", "1.2", "1.4", "1.6",
|
||||||
|
"1.8", "2", "2.2", "2.4"
|
||||||
|
);
|
||||||
|
|
||||||
|
public Gamma() {
|
||||||
|
super("gamma", "Gamma", VALUES, "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int defaultColumnsCount() {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <I> void accept(Visitor<I> visitor, I input) {
|
||||||
|
visitor.visit(this, input);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.annimon.ffmpegbot.parameters;
|
||||||
|
|
||||||
|
import com.annimon.ffmpegbot.commands.ffmpeg.Visitor;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Saturation extends StringParameter {
|
||||||
|
private static final List<String> VALUES = List.of(
|
||||||
|
"0", "0.25", "0.5", "0.75",
|
||||||
|
"1", "1.25", "1.5", "1.75",
|
||||||
|
"2", "2.25", "2.5", "3"
|
||||||
|
);
|
||||||
|
|
||||||
|
public Saturation() {
|
||||||
|
super("saturation", "Saturation", VALUES, "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int defaultColumnsCount() {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <I> void accept(Visitor<I> visitor, I input) {
|
||||||
|
visitor.visit(this, input);
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,9 @@ public class VideoResolver implements ParametersResolver {
|
|||||||
|
|
||||||
if (hasVideo) {
|
if (hasVideo) {
|
||||||
parameters.addAll(List.of(
|
parameters.addAll(List.of(
|
||||||
|
new Contrast(),
|
||||||
|
new Gamma(),
|
||||||
|
new Saturation(),
|
||||||
new VideoBitrate(),
|
new VideoBitrate(),
|
||||||
new VideoScale(),
|
new VideoScale(),
|
||||||
new VideoFrameRate()
|
new VideoFrameRate()
|
||||||
|
Loading…
Reference in New Issue
Block a user