Fixed indexes

This commit is contained in:
Brage 2023-07-24 00:37:29 +02:00
parent 8ea7c4ce7e
commit 5e3a99c9a0
4 changed files with 13 additions and 10 deletions

View File

@ -3,7 +3,7 @@ package no.iktdev.streamit.content.reader.analyzer.encoding.dto
import no.iktdev.streamit.content.common.streams.AudioStream import no.iktdev.streamit.content.common.streams.AudioStream
import no.iktdev.streamit.content.reader.preference import no.iktdev.streamit.content.reader.preference
class AudioEncodeArguments(val audio: AudioStream) { class AudioEncodeArguments(val audio: AudioStream, val index: Int) {
fun isAudioCodecEqual() = audio.codec_name.lowercase() == preference.audio.codec.lowercase() fun isAudioCodecEqual() = audio.codec_name.lowercase() == preference.audio.codec.lowercase()
@ -18,7 +18,7 @@ class AudioEncodeArguments(val audio: AudioStream) {
} else if (!isAudioCodecEqual()) { } else if (!isAudioCodecEqual()) {
result.addAll(listOf("-c:a", preference.audio.codec)) result.addAll(listOf("-c:a", preference.audio.codec))
} else result.addAll(listOf("-acodec", "copy")) } else result.addAll(listOf("-acodec", "copy"))
result.addAll(listOf("-map", "0:a:${audio.index}")) result.addAll(listOf("-map", "0:a:${index}"))
return result return result
} }
} }

View File

@ -2,12 +2,12 @@ package no.iktdev.streamit.content.reader.analyzer.encoding.dto
import no.iktdev.streamit.content.common.streams.SubtitleStream import no.iktdev.streamit.content.common.streams.SubtitleStream
class SubtitleEncodeArguments(val subtitle: SubtitleStream) { class SubtitleEncodeArguments(val subtitle: SubtitleStream, val index: Int) {
fun getSubtitleArguments(): List<String> { fun getSubtitleArguments(): List<String> {
val result = mutableListOf<String>() val result = mutableListOf<String>()
result.addAll(listOf("-c:s", "copy")) result.addAll(listOf("-c:s", "copy"))
result.addAll(listOf("-map", "0:s:${subtitle.index}")) result.addAll(listOf("-map", "0:s:$index"))
return result return result
} }

View File

@ -3,7 +3,7 @@ package no.iktdev.streamit.content.reader.analyzer.encoding.dto
import no.iktdev.streamit.content.common.streams.VideoStream import no.iktdev.streamit.content.common.streams.VideoStream
import no.iktdev.streamit.content.reader.preference import no.iktdev.streamit.content.reader.preference
class VideoEncodeArguments(val video: VideoStream) { class VideoEncodeArguments(val video: VideoStream, val index: Int) {
fun isVideoCodecEqual() = video.codec_name == getCorrectCodec() fun isVideoCodecEqual() = video.codec_name == getCorrectCodec()
@ -19,7 +19,7 @@ class VideoEncodeArguments(val video: VideoStream) {
if (preference.video.pixelFormatPassthrough.none { it == video.pix_fmt }) { if (preference.video.pixelFormatPassthrough.none { it == video.pix_fmt }) {
result.addAll(listOf("-pix_fmt", preference.video.pixelFormat)) result.addAll(listOf("-pix_fmt", preference.video.pixelFormat))
} }
result.addAll(listOf("-map", "0:v:${video.index}")) result.addAll(listOf("-map", "0:v:${index}"))
return result return result
} }

View File

@ -50,21 +50,24 @@ class EncodeArgumentSelector(val collection: String, val inputFile: String, val
else { else {
val outFileName = "$outFileName.mp4" val outFileName = "$outFileName.mp4"
val outFile = CommonConfig.outgoingContent.using(collection, outFileName) val outFile = CommonConfig.outgoingContent.using(collection, outFileName)
val audioIndex = obtainAudioStreams().indexOf(selectedAudio)
val videoIndex = obtainVideoStreams().indexOf(selectedVideo)
EncodeWork( EncodeWork(
collection = collection, collection = collection,
inFile = inputFile, inFile = inputFile,
arguments = VideoEncodeArguments(selectedVideo).getVideoArguments() + arguments = VideoEncodeArguments(selectedVideo, videoIndex).getVideoArguments() +
AudioEncodeArguments(selectedAudio).getAudioArguments(), AudioEncodeArguments(selectedAudio, audioIndex).getAudioArguments(),
outFile = outFile.absolutePath outFile = outFile.absolutePath
) )
} }
} }
fun getSubtitleArguments(): List<ExtractWork> { fun getSubtitleArguments(): List<ExtractWork> {
val subtitleStreams = SubtitleStreamSelector(streams.streams.filterIsInstance<SubtitleStream>()) val availableSubtitleStreams = streams.streams.filterIsInstance<SubtitleStream>()
val subtitleStreams = SubtitleStreamSelector(availableSubtitleStreams)
return subtitleStreams.getDesiredStreams().map { return subtitleStreams.getDesiredStreams().map {
val args = SubtitleEncodeArguments(it) val args = SubtitleEncodeArguments(it, availableSubtitleStreams.indexOf(it))
val language = it.tags.language ?: "eng" val language = it.tags.language ?: "eng"
val outFileName = "$outFileName.${subtitleStreams.getFormatToCodec(it.codec_name)}" val outFileName = "$outFileName.${subtitleStreams.getFormatToCodec(it.codec_name)}"
val outFile = CommonConfig.outgoingContent.using(collection, "sub", language, outFileName) val outFile = CommonConfig.outgoingContent.using(collection, "sub", language, outFileName)