summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-08-08 10:12:16 +0200
committerLibravatar GitHub <noreply@github.com>2024-08-08 08:12:16 +0000
commitb19cfee7aefbc42bdba8f45d5fb99feb2c2385fe (patch)
treea21493efc386bbfa98560df9c308ea1aea555dd6 /internal
parentupdates our ffmpreg version, heh (#3181) (diff)
downloadgotosocial-b19cfee7aefbc42bdba8f45d5fb99feb2c2385fe.tar.xz
[feature] Use gifv type for short soundless mp4 videos (#3182)
Diffstat (limited to 'internal')
-rw-r--r--internal/gtsmodel/mediaattachment.go3
-rw-r--r--internal/media/ffmpeg.go10
-rw-r--r--internal/media/processingmedia.go3
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)