Estrarre metadata dai video in Kotlin e ffmpeg-cli-wrapper
FFmpeg lo conosciamo tutti penso; ffmpeg-cli-wrapper è un wrapper per Java, che noi useremo in Kotlin per estrarre metadata dai video!
La prima cosa da fare è installare FFmpeg sul proprio sistema; essendo un wrapper, ha la necessità di avere il programma installato.
Poi, se usate Maven:
<dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.7.0</version>
</dependency>
Detto ciò un pò di codice:
package com.mp.multimedia
import net.bramp.ffmpeg.FFprobe
import net.bramp.ffmpeg.probe.FFmpegFormat
import java.io.File
import java.text.DecimalFormat
import java.time.LocalTime
import java.time.format.DateTimeFormatter
fun main(args: Array<String>) {
getVideo()
}
fun getVideo() {
val df = DecimalFormat("0.00")
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
println("==========")
val folder = "/run/media/fermat/DATI/Film/"
File(folder)
.walk()
.sortedBy { it.name }
.forEach {
if (it.isFile) {
var formatLongName = ""
var codecLongName = ""
var size = 0.0
var width = 0
var height = 0
var timeDuration = ""
try {
val ffprobe = FFprobe("/usr/bin/ffprobe");
val probeResult = ffprobe.probe(it.absolutePath)
val format: FFmpegFormat = probeResult.getFormat()
val stream = probeResult.getStreams()[0]
val time: LocalTime = LocalTime.MIN.plusSeconds(format.duration.toLong())
timeDuration = formatter.format(time)
formatLongName = format.format_long_name
codecLongName = stream.codec_long_name
size = ((format.size / (1024.0 * 1024.0 * 1024.0)))
width = stream.width
height = stream.height
} catch (ex: Exception) {
}
println(it.name)
println(formatLongName)
println(df.format(size))
println(codecLongName)
println(width)
println(height)
println(timeDuration)
println("---------")
}
}
println("==========")
}
Come vedete dobbiamo indicare dove si trova FFprobe, che viene installato insieme ad FFmpeg.
Ovviamente dipende dal sistema su cui lo installate.
Poi potete notare quel try/catch; in pratica su alcuni video ricevo un errore, che ho deciso di bypassare in attesa di trovare una soluzione.
Potete leggere su html.it la discussione al riguardo.
Enjoy!
kotlin ffmpeg ffprobe ffmpegformat maven
Commentami!