summaryrefslogtreecommitdiff
path: root/internal/media
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/media
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/media')
-rw-r--r--internal/media/ffmpeg.go10
-rw-r--r--internal/media/processingmedia.go3
2 files changed, 11 insertions, 2 deletions
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)