feat(meta): use ffmpeg to retrieve album art & metadata

This commit is contained in:
Unlock Music Dev
2022-11-24 23:28:44 +08:00
parent 9494a535a9
commit 3cf542c84c
2 changed files with 154 additions and 0 deletions

33
internal/ffmpeg/ffmpeg.go Normal file
View File

@@ -0,0 +1,33 @@
package ffmpeg
import (
"bytes"
"context"
"fmt"
"io"
"os/exec"
)
func ExtractAlbumArt(ctx context.Context, rd io.Reader) (io.Reader, error) {
cmd := exec.CommandContext(ctx, "ffmpeg",
"-i", "pipe:0", // input from stdin
"-an", // disable audio
"-codec:v", "copy", // copy video(image) codec
"-f", "image2", // use image2 muxer
"pipe:1", // output to stdout
)
cmd.Stdin = rd
stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{}
cmd.Stdout, cmd.Stderr = stdout, stderr
if err := cmd.Start(); err != nil {
return nil, fmt.Errorf("ffmpeg run: %w", err)
}
if err := cmd.Wait(); err != nil {
return nil, fmt.Errorf("ffmpeg wait: %w: %s", err, stderr.String())
}
return stdout, nil
}