Skip to content

Commit

Permalink
[bugfix] support classifying correct video codec without audio as webm (
Browse files Browse the repository at this point in the history
#3494)

* for webm support video:[vp8,vp9,av1] and audio:[NONE,vorbis,opus]

* improved unsupported data type error output
  • Loading branch information
NyaaaWhatsUpDoc authored Oct 28, 2024
1 parent e86592b commit 7ec6509
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
29 changes: 21 additions & 8 deletions internal/media/ffmpeg.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,18 +392,31 @@ func (res *result) GetFileType() (gtsmodel.FileType, string) {
case "matroska,webm":
switch {
case len(res.video) > 0:
var isWebm bool

switch res.video[0].codec {
case "vp8", "vp9", "av1":
default:
return gtsmodel.FileTypeVideo, "mkv"
}
if len(res.audio) > 0 {
switch res.audio[0].codec {
case "vorbis", "opus", "libopus":
// webm only supports [VP8/VP9/AV1]+[vorbis/opus]
return gtsmodel.FileTypeVideo, "webm"
if len(res.audio) > 0 {
switch res.audio[0].codec {
case "vorbis", "opus", "libopus":
// webm only supports [VP8/VP9/AV1] +
// [vorbis/opus]
isWebm = true
}
} else {
// no audio with correct
// video codec also fine.
isWebm = true
}
}

if isWebm {
// Check for valid webm codec config.
return gtsmodel.FileTypeVideo, "webm"
}

// All else falls under generic mkv.
return gtsmodel.FileTypeVideo, "mkv"
case len(res.audio) > 0:
return gtsmodel.FileTypeAudio, "mka"
}
Expand Down
2 changes: 1 addition & 1 deletion internal/media/processingemoji.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ func (p *ProcessingEmoji) store(ctx context.Context) error {
if err != nil && !isUnsupportedTypeErr(err) {
return gtserror.Newf("ffprobe error: %w", err)
} else if result == nil {
log.Warn(ctx, "unsupported data type")
log.Warnf(ctx, "unsupported data type by ffprobe: %v", err)
return nil
}

Expand Down
8 changes: 6 additions & 2 deletions internal/media/processingmedia.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"os"

errorsv2 "codeberg.org/gruf/go-errors/v2"
"codeberg.org/gruf/go-kv"
"codeberg.org/gruf/go-runners"

"github.com/superseriousbusiness/gotosocial/internal/gtserror"
Expand Down Expand Up @@ -166,7 +167,7 @@ func (p *ProcessingMedia) store(ctx context.Context) error {
if err != nil && !isUnsupportedTypeErr(err) {
return gtserror.Newf("ffprobe error: %w", err)
} else if result == nil {
log.Warn(ctx, "unsupported data type")
log.Warnf(ctx, "unsupported data type by ffprobe: %v", err)
return nil
}

Expand Down Expand Up @@ -214,7 +215,10 @@ func (p *ProcessingMedia) store(ctx context.Context) error {
// metadata, in order to keep tags.

default:
log.Warn(ctx, "unsupported data type: %s", result.format)
log.WarnKVs(ctx, kv.Fields{
{K: "format", V: result.format},
{K: "msg", V: "unsupported data type"},
}...)
return nil
}

Expand Down

0 comments on commit 7ec6509

Please sign in to comment.