diff options
author | 2024-08-08 10:12:16 +0200 | |
---|---|---|
committer | 2024-08-08 08:12:16 +0000 | |
commit | b19cfee7aefbc42bdba8f45d5fb99feb2c2385fe (patch) | |
tree | a21493efc386bbfa98560df9c308ea1aea555dd6 /internal | |
parent | updates our ffmpreg version, heh (#3181) (diff) | |
download | gotosocial-b19cfee7aefbc42bdba8f45d5fb99feb2c2385fe.tar.xz |
[feature] Use gifv type for short soundless mp4 videos (#3182)
Diffstat (limited to 'internal')
-rw-r--r-- | internal/gtsmodel/mediaattachment.go | 3 | ||||
-rw-r--r-- | internal/media/ffmpeg.go | 10 | ||||
-rw-r--r-- | internal/media/processingmedia.go | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/internal/gtsmodel/mediaattachment.go b/internal/gtsmodel/mediaattachment.go index eb792ae3b..f4bfb5929 100644 --- a/internal/gtsmodel/mediaattachment.go +++ b/internal/gtsmodel/mediaattachment.go @@ -91,6 +91,7 @@ const ( FileTypeImage FileType = 1 // FileTypeImage is for jpegs, pngs, and standard gifs FileTypeAudio FileType = 2 // FileTypeAudio is for audio-only files (no video) FileTypeVideo FileType = 3 // FileTypeVideo is for files with audio + visual + FileTypeGifv FileType = 4 // FileTypeGifv is for short video-only files (20s or less, mp4, no audio). ) // String returns a stringified, frontend API compatible form of FileType. @@ -104,6 +105,8 @@ func (t FileType) String() string { return "audio" case FileTypeVideo: return "video" + case FileTypeGifv: + return "gifv" default: panic("invalid filetype") } diff --git a/internal/media/ffmpeg.go b/internal/media/ffmpeg.go index 72ee1bc33..eb6dd9263 100644 --- a/internal/media/ffmpeg.go +++ b/internal/media/ffmpeg.go @@ -305,7 +305,15 @@ func (res *result) GetFileType() (gtsmodel.FileType, string) { case "mov,mp4,m4a,3gp,3g2,mj2": switch { case len(res.video) > 0: - return gtsmodel.FileTypeVideo, "mp4" + if len(res.audio) == 0 && + res.duration <= 30 { + // Short, soundless + // video file aka gifv. + return gtsmodel.FileTypeGifv, "mp4" + } else { + // Video file (with or without audio). + return gtsmodel.FileTypeVideo, "mp4" + } case len(res.audio) > 0 && res.audio[0].codec == "aac": // m4a only supports [aac] audio. diff --git a/internal/media/processingmedia.go b/internal/media/processingmedia.go index 504cda11e..1d286bda7 100644 --- a/internal/media/processingmedia.go +++ b/internal/media/processingmedia.go @@ -202,7 +202,8 @@ func (p *ProcessingMedia) store(ctx context.Context) error { switch p.media.Type { case gtsmodel.FileTypeImage, - gtsmodel.FileTypeVideo: + gtsmodel.FileTypeVideo, + gtsmodel.FileTypeGifv: // Attempt to clean as metadata from file as possible. if err := clearMetadata(ctx, temppath); err != nil { return gtserror.Newf("error cleaning metadata: %w", err) |