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 00:04:42] – [Golang os exec Examples: Command Start and Run] manfredbeispiel-programme_in_go [2023-01-17 00:05:55] (aktuell) – [Verwendung einer Bibliothek] manfred
Zeile 57: Zeile 57:
   Tschüß, verbesserte Welt!   Tschüß, verbesserte Welt!
  
- 
-==== Funktion importieren (eigene Bibliothek) ==== 
- 
-  * [[http://golang.org/doc/code.html#Library]] 
- 
-  > vi begruessung.go 
-<file go begruessung.go> 
-package begruessung 
- 
-import "fmt" 
- 
-// Begrüßung 
-func Hallo(name string) { 
-        begruessung := "Hallo %v!\n" 
-        fmt.Printf(begruessung, name) 
-} 
- 
-// Verabschiedung 
-func Tschuess(name string) { 
-        verabschiedung := "Tschüß, %v!\n" 
-        fmt.Printf(verabschiedung, name) 
-} 
-</file> 
-  > go build begruessung.go 
- 
-Leider kompiliert "begruessung.go" bei mir nicht... FIXME 
- 
-  > vi Funktionsimport.go 
-<file go Funktionsimport.go> 
-package main 
- 
-import "./begruessung" 
- 
-func main() { 
-        var Welt string = "verbesserte Welt" 
- 
-        begruessung.Hallo(Welt) 
- 
-        begruessung.Tschuess(Welt) 
-} 
-</file> 
-  > go build Funktionsimport.go 
-  > ./Funktionsimport 
  
  
Zeile 911: Zeile 868:
  
 [[https://thedeveloperblog.com/go/os-exec-go]] [[https://thedeveloperblog.com/go/os-exec-go]]
 +
 +<file go programmaufruf.go>
 +package main
 +
 +import (
 +        "fmt"
 +        "log"
 +        "os"
 +        "os/exec"
 +)
 +
 +func main() {
 +        //var psize string
 +        //psize = "9223372036G"
 +        var psize string = "9223372036G"
 +        var film = os.Args[1]
 +
 +        prog := "ffprobe"
 +        cmd := exec.Command(prog, "-v", "error", "-probesize", psize, "-analyzeduration", psize, "-i", film, "-show_streams")
 +
 +        out, err := cmd.Output()
 +        if err != nil {
 +                log.Fatal(err)
 +        }
 +        fmt.Printf("%s\n", out)
 +}
 +</file>
 +
 +  > go build programmstart.go
 +  ./programmstart title_t01.mpg
 +  [STREAM]
 +  index=0
 +  codec_name=mpeg2video
 +  codec_long_name=MPEG-2 video
 +  profile=Main
 +  codec_type=video
 +  codec_tag_string=[0][0][0][0]
 +  codec_tag=0x0000
 +  width=720
 +  height=576
 +  ...
 +
 +//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.1673654682.txt · Zuletzt geändert: von manfred