mirror of
https://git.um-react.app/um/cli.git
synced 2025-11-28 03:33:02 +00:00
feat(meta): use ffmpeg to retrieve album art & metadata
This commit is contained in:
33
internal/ffmpeg/ffmpeg.go
Normal file
33
internal/ffmpeg/ffmpeg.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user