All checks were successful
KnarCraft/FFmpegConvert/pipeline/head This commit looks good
94 lines
3.0 KiB
Java
94 lines
3.0 KiB
Java
package net.knarcraft.ffmpegconverter.streams;
|
|
|
|
/**
|
|
* An object representation of a subtitle stream in a media file
|
|
*/
|
|
public class SubtitleStream extends AbstractStream implements StreamObject {
|
|
final private String title;
|
|
final private String file;
|
|
final private boolean isFullSubtitle;
|
|
final private boolean isImageSubtitle;
|
|
|
|
/**
|
|
* Instantiates a new subtitle stream
|
|
*
|
|
* @param codecName <p>The name of the codec for the subtitle stream.</p>
|
|
* @param absoluteIndex <p>The index of the subtitle stream.</p>
|
|
* @param relativeIndex <p>The index of the subtitle stream relative to other subtitle streams.</p>
|
|
* @param language <p>The language of the subtitle stream.</p>
|
|
* @param title <p>The title of the subtitle stream.</p>
|
|
* @param file <p>The file containing the subtitle.</p>
|
|
*/
|
|
public SubtitleStream(String codecName, int absoluteIndex, int relativeIndex, String language, String title,
|
|
String file) {
|
|
this.codecName = codecName;
|
|
this.absoluteIndex = absoluteIndex;
|
|
this.language = language;
|
|
this.title = title;
|
|
this.isFullSubtitle = isFullSubtitle();
|
|
this.relativeIndex = relativeIndex;
|
|
this.isImageSubtitle = isImageSubtitle();
|
|
this.file = file;
|
|
}
|
|
|
|
/**
|
|
* Gets the title of the subtitle stream
|
|
*
|
|
* @return <p>The title of the subtitle stream.</p>
|
|
*/
|
|
public String getTitle() {
|
|
return this.title;
|
|
}
|
|
|
|
/**
|
|
* Gets the file name of the file containing this subtitle
|
|
*
|
|
* @return <p>The file name containing the subtitle stream.</p>
|
|
*/
|
|
public String getFile() {
|
|
return this.file;
|
|
}
|
|
|
|
/**
|
|
* Gets whether the subtitle is an image subtitle
|
|
*
|
|
* @return <p>Whether the subtitles is an image subtitle.</p>
|
|
*/
|
|
public boolean getIsImageSubtitle() {
|
|
return this.isImageSubtitle;
|
|
}
|
|
|
|
/**
|
|
* Gets whether the subtitle is a full subtitle
|
|
*
|
|
* @return <p>Whether the subtitle is a full subtitle.</p>
|
|
*/
|
|
public boolean getIsFullSubtitle() {
|
|
return this.isFullSubtitle;
|
|
}
|
|
|
|
/**
|
|
* Checks whether a subtitle is image based (as opposed to text based)
|
|
*
|
|
* @return <p>True if the subtitle is image based.</p>
|
|
*/
|
|
private boolean isImageSubtitle() {
|
|
return codecName != null && (getCodecName().equals("hdmv_pgs_subtitle")
|
|
|| getCodecName().equals("dvd_subtitle"));
|
|
}
|
|
|
|
/**
|
|
* Checks whether the subtitle translates everything (as opposed to just songs and signs)
|
|
*
|
|
* @return <p>True if the subtitle translates everything.</p>
|
|
*/
|
|
private boolean isFullSubtitle() {
|
|
if (getTitle() == null) {
|
|
return false;
|
|
}
|
|
String titleLowercase = getTitle().toLowerCase();
|
|
return !titleLowercase.matches(".*signs?[ &/a-z]+songs?.*") &&
|
|
!titleLowercase.matches(".*songs?[ &/a-z]+signs?.*") &&
|
|
!titleLowercase.matches(".*forced.*");
|
|
}
|
|
} |