Как работать с звуком и видео в Golang?

Пользователь

от dock.moore , в категории: Общие вопросы , год назад

Как работать с звуком и видео в Golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

Пользователь

от alysha.funk , год назад

@dock.moore 

Golang имеет несколько библиотек для работы с звуком и видео. Некоторые из них:

  1. github.com/hajimehoshi/oto - библиотека для воспроизведения звука.
  2. github.com/faiface/beep - библиотека для работы со звуком в форматах WAV, MP3 и OGG.
  3. github.com/rajveermalviya/go-ffmpeg - библиотека для работы с видео в форматах, поддерживаемых FFmpeg.


Пример работы с oto:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main

import (
	"github.com/hajimehoshi/oto"
	"github.com/hajimehoshi/go-mp3"
	"io"
	"log"
	"net/http"
)

func main() {
	resp, err := http.Get("http://example.com/mysong.mp3")
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	d, err := mp3.NewDecoder(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	p, err := oto.NewPlayer(d.SampleRate(), 2, 2, 8192)
	if err != nil {
		log.Fatal(err)
	}
	defer p.Close()

	if _, err := io.Copy(p, d); err != nil {
		log.Fatal(err)
	}
}


Пример работы с beep:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main

import (
	"github.com/faiface/beep"
	"github.com/faiface/beep/mp3"
	"github.com/faiface/beep/speaker"
	"log"
	"net/http"
)

func main() {
	resp, err := http.Get("http://example.com/mysong.mp3")
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	streamer, format, err := mp3.Decode(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	defer streamer.Close()

	speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))

	done := make(chan struct{})
	speaker.Play(beep.Seq(streamer, beep.Callback(func() {
		close(done)
	})))

	<-done
}


Пример работы с go-ffmpeg:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package main

import (
	"github.com/rajveermalviya/go-ffmpeg/ffmpeg"
	"log"
)

func main() {
	inFileName := "myvideo.mp4"
	outFileName := "myoutputvideo.mp4"

	ctx := &ffmpeg.Context{
		FfmpegBinPath: "/usr/local/bin/ffmpeg",
	}

	if err := ctx.ConvertToMP4(inFileName, outFileName); err != nil {
		log.Fatal(err)
	}
}


Обратите внимание, что для работы с go-ffmpeg вам необходимо установить FFmpeg на свой компьютер.