Benutzer-Werkzeuge

Webseiten-Werkzeuge


beispiel-programme_in_go

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
beispiel-programme_in_go [2023-01-14 01:44:05] – [Golang os exec Examples: Command Start and Run] manfredbeispiel-programme_in_go [2023-01-17 00:05:55] (aktuell) – [Verwendung einer Bibliothek] manfred
Zeile 897: Zeile 897:
  
   > go build programmstart.go   > go build programmstart.go
-  ./programmstart title_t01.mkv+  ./programmstart title_t01.mpg
   [STREAM]   [STREAM]
   index=0   index=0
Zeile 910: Zeile 910:
   ...   ...
  
 +//In der Praxis wird man eine solche Aufgabe nicht so lösen, sondern dafür eine entsprechende Bibliothek einsetzen.//
 +
 +
 +=== Verwendung einer Bibliothek ===
 +
 +[[https://pkg.go.dev/gopkg.in/vansante/go-ffprobe.v2|go-ffprobe]]
 +
 +<file go FFprobeTest.go>
 +package main
 +
 +import (
 + "context"
 + "fmt"
 + "log"
 + "os"
 + "regexp"
 + "strconv"
 + "time"
 +
 + "gopkg.in/vansante/go-ffprobe.v2"
 +)
 +
 +func string2int(s string) int {
 + i, err := strconv.Atoi(s)
 + if err != nil {
 + i = 0
 + }
 + return i
 +}
 +
 +func main() {
 + var film = os.Args[1]
 +
 + ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Minute)
 + defer cancelFn()
 +
 + data, err := ffprobe.ProbeURL(ctx, film)
 + if err != nil {
 + log.Panicf("Error getting data: %v", err)
 + }
 +
 + //fmt.Printf("%s\n", data.Streams[0].CodecType)
 + //fmt.Printf("%s\n", data.FirstSubtitleStream())
 +
 + for i, s := range data.Streams {
 + codectype := s.CodecType
 + sprache, _ := s.TagList.GetString("language")
 + fmt.Printf("Spur: %v, Typ: %v, Sprache: %v\n", i, codectype, sprache)
 +
 + if "video" == s.CodecType {
 + fmt.Printf("Spur: %v, Typ: %v, Width: %v\n", i, codectype, data.Streams[i].Width)
 + fmt.Printf("Spur: %v, Typ: %v, Height: %v\n", i, codectype, data.Streams[i].Height)
 + fmt.Printf("Spur: %v, Typ: %v, PAR: %v\n", i, codectype, data.Streams[i].SampleAspectRatio)
 + fmt.Printf("Spur: %v, Typ: %v, DAR: %v\n", i, codectype, data.Streams[i].DisplayAspectRatio)
 + fmt.Printf("Spur: %v, Typ: %v, Level: %v\n", i, codectype, data.Streams[i].Level)
 + fmt.Printf("Spur: %v, Typ: %v, FieldOrder: %v\n", i, codectype, data.Streams[i].FieldOrder)
 + fmt.Printf("Spur: %v, Typ: %v, FPS: %v\n", i, codectype, data.Streams[i].RFrameRate)
 + fmt.Printf("Spur: %v, Typ: %v, avg FSP: %v\n", i, codectype, data.Streams[i].AvgFrameRate)
 +
 + drehung := 0
 + rotation, _ := s.TagList.GetString("Rotate")
 + drehlength := len([]rune(rotation))
 + if drehlength > 0 {
 + drehung = string2int(rotation)
 + }
 + fmt.Printf("Spur: %v, Typ: %v, Drehung: %v Grad\n", i, codectype, drehung)
 +
 + spieldauer := 0
 + duration, _ := s.TagList.GetString("DURATION")
 + durlength := len([]rune(duration))
 + if durlength > 0 {
 + var hms [3]int
 + rsplit := regexp.MustCompile("[:.]")
 + for g, h := range rsplit.Split(duration, -1)[:3] {
 + hms[g] = string2int(h)
 + }
 +
 + // hms -> H:M:S -> Stunde:Minute:Sekunde
 + spieldauer = hms[0]*3600 + hms[1]*60 + hms[2]
 + }
 +
 + fmt.Printf("Spur: %v, Typ: %v, Spieldauer: %v Sekunden\n", i, codectype, spieldauer)
 +
 + // Alle TAGs aus dem Container anzeigen
 + //for n, t := range s.TagList {
 + // fmt.Printf("        %v, %v\n", n, t)
 + //}
 + }
 + }
 +}
 +</file>
 +
 +<code>
 +> go build FFprobeTest.go
 +> ./FFprobeTest titlet01.mkv
 +Spur: 0, Typ: video, Sprache: eng
 +Spur: 0, Typ: video, Width: 720
 +Spur: 0, Typ: video, Height: 576
 +Spur: 0, Typ: video, PAR: 16:15
 +Spur: 0, Typ: video, DAR: 4:3
 +Spur: 0, Typ: video, Level: 8
 +Spur: 0, Typ: video, FieldOrder: tt
 +Spur: 0, Typ: video, FPS: 25/1
 +Spur: 0, Typ: video, avg FSP: 25/1
 +Spur: 0, Typ: video, Drehung: 0 Grad
 +Spur: 0, Typ: video, Spieldauer: 122 Sekunden
 +Spur: 1, Typ: audio, Sprache: eng
 +Spur: 2, Typ: subtitle, Sprache: eng
 +Spur: 3, Typ: subtitle, Sprache: ger
 +</code>
  
  
/home/http/wiki/data/attic/beispiel-programme_in_go.1673660645.txt · Zuletzt geändert: von manfred