ixon
@ixon


Как с помощью golang создать webm видео?

С помощью чего такое реализовать, в какую сторону копать?
Программа на golang при выполнении которой создаётся видео в формате webm, первые 3 секунды фон заполняется цветом RGB (255,0,0), с 3 по 6 RGB(0,255,0) и с 6 по 9 секунды RGB(0,0,255).
Как такое можно сделать, какие библиотеки для этого можно использовать?
  • Вопрос задан
  • 274 просмотра
Пригласить эксперта
Ответы на вопрос 1
Можно так. В системе должна быть установлена консольная утилита ffmpeg.

Нажмите, чтобы раскрыть код
package main

import (
	"io"
	"os"
	"os/exec"
	"strings"
)

func main() {
	resulution := "640x480" // Разрешение видео
	framerate := "1"        // Частота кадров, здесб нам достаточно 1 кадр в секунду
	outfile := "out.webm"   // Файл, в который писать, расширение задаст его формат
	color1 := "0xFF0000"    // RGB (255,0,0)
	color2 := "0x00FF00"    // RGB (0,255,0)
	color3 := "0x0000FF"    // RGB (0,0,255)

	//////////////////////////////
	filtergraph := []string{
		"color=c=" + color1 + ":size=" + resulution + ":duration=3:s=qcif:r=" + framerate + " [v1]",
		"color=c=" + color2 + ":size=" + resulution + ":duration=3:s=qcif:r=" + framerate + " [v2]",
		"color=c=" + color3 + ":size=" + resulution + ":duration=3:s=qcif:r=" + framerate + " [v3]",
		`[v1] [v2] [v3] concat=n=3 [v]`,
	}

	allOptions := []string{
		"-filter_complex", strings.Join(filtergraph, ";"),
		"-map", "[v]",
		"-threads", "0", "-y", outfile,
	}

	RunCmd("ffmpeg", allOptions...)
}

func ReadAndPrint(r io.Reader) {
	io.Copy(os.Stdout, r)
}

func RunCmd(name string, args ...string) {
	cmd := exec.Command(name, args...)
	stdout, err := cmd.StdoutPipe()
	if err != nil {
		panic(err)
	}
	stderr, err := cmd.StderrPipe()
	if err != nil {
		panic(err)
	}

	go ReadAndPrint(stdout)
	go ReadAndPrint(stderr)

	err = cmd.Run()
	if err != nil {
		panic(err)
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы