Estrarre metadata dai video in Kotlin e ffmpeg-cli-wrapper

Mattepuffo's logo
Estrarre metadata dai video in Kotlin e ffmpeg-cli-wrapper

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!


Condividi su Facebook

Commentami!