From 1659f75ae6e491355e1d32f0f5e8b956ef70a797 Mon Sep 17 00:00:00 2001
From: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Thu, 22 Dec 2022 11:48:28 +0100
Subject: [PATCH] [feature] For video attachments, store + return fps, bitrate,
duration (#1282)
* start messing about with different mp4 metadata extraction
* heyyooo it works
* add test cow
* move useful multierror to gtserror package
* error out if video doesn't seem to be a real mp4
* test parsing mkv in disguise as mp4
* tidy up error handling
* remove extraneous line
* update framerate formatting
* use float32 for aspect
* fixy mctesterson
---
.../20221220134514_mp4_jiggery_pokery.go | 59 +++++++++
.../federation/dereferencing/media_test.go | 6 +-
internal/gtserror/multi.go | 45 +++++++
internal/gtsmodel/mediaattachment.go | 13 +-
internal/media/image.go | 6 +-
internal/media/manager_test.go | 112 ++++++++++++++++-
internal/media/processingmedia.go | 20 ++-
internal/media/test/longer-mp4-original.mp4 | Bin 0 -> 109549 bytes
internal/media/test/longer-mp4-processed.mp4 | Bin 0 -> 109549 bytes
internal/media/test/longer-mp4-thumbnail.jpg | Bin 0 -> 3784 bytes
internal/media/test/not-an.mp4 | Bin 0 -> 1819035 bytes
internal/media/types.go | 7 +-
internal/media/video.go | 118 ++++++++++--------
internal/typeutils/converter_test.go | 12 +-
internal/typeutils/internaltofrontend.go | 60 ++++-----
internal/typeutils/internaltofrontend_test.go | 11 ++
testrig/media/cowlick-original.mp4 | Bin 0 -> 2273532 bytes
testrig/media/cowlick-small.jpeg | Bin 0 -> 5272 bytes
testrig/testmodels.go | 72 ++++++++++-
19 files changed, 433 insertions(+), 108 deletions(-)
create mode 100644 internal/db/bundb/migrations/20221220134514_mp4_jiggery_pokery.go
create mode 100644 internal/gtserror/multi.go
create mode 100644 internal/media/test/longer-mp4-original.mp4
create mode 100644 internal/media/test/longer-mp4-processed.mp4
create mode 100644 internal/media/test/longer-mp4-thumbnail.jpg
create mode 100644 internal/media/test/not-an.mp4
create mode 100644 testrig/media/cowlick-original.mp4
create mode 100644 testrig/media/cowlick-small.jpeg
diff --git a/internal/db/bundb/migrations/20221220134514_mp4_jiggery_pokery.go b/internal/db/bundb/migrations/20221220134514_mp4_jiggery_pokery.go
new file mode 100644
index 00000000..ecccea08
--- /dev/null
+++ b/internal/db/bundb/migrations/20221220134514_mp4_jiggery_pokery.go
@@ -0,0 +1,59 @@
+/*
+ GoToSocial
+ Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package migrations
+
+import (
+ "context"
+ "strings"
+
+ "github.com/uptrace/bun"
+)
+
+func init() {
+ up := func(ctx context.Context, db *bun.DB) error {
+ return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
+ _, err := tx.ExecContext(ctx, "ALTER TABLE ? ADD COLUMN ? REAL", bun.Ident("media_attachments"), bun.Ident("original_duration"))
+ if err != nil && !(strings.Contains(err.Error(), "already exists") || strings.Contains(err.Error(), "duplicate column name") || strings.Contains(err.Error(), "SQLSTATE 42701")) {
+ return err
+ }
+
+ _, err = tx.ExecContext(ctx, "ALTER TABLE ? ADD COLUMN ? REAL", bun.Ident("media_attachments"), bun.Ident("original_framerate"))
+ if err != nil && !(strings.Contains(err.Error(), "already exists") || strings.Contains(err.Error(), "duplicate column name") || strings.Contains(err.Error(), "SQLSTATE 42701")) {
+ return err
+ }
+
+ _, err = tx.ExecContext(ctx, "ALTER TABLE ? ADD COLUMN ? INTEGER", bun.Ident("media_attachments"), bun.Ident("original_bitrate"))
+ if err != nil && !(strings.Contains(err.Error(), "already exists") || strings.Contains(err.Error(), "duplicate column name") || strings.Contains(err.Error(), "SQLSTATE 42701")) {
+ return err
+ }
+
+ return nil
+ })
+ }
+
+ down := func(ctx context.Context, db *bun.DB) error {
+ return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
+ return nil
+ })
+ }
+
+ if err := Migrations.Register(up, down); err != nil {
+ panic(err)
+ }
+}
diff --git a/internal/federation/dereferencing/media_test.go b/internal/federation/dereferencing/media_test.go
index 1c460b69..befd9f8b 100644
--- a/internal/federation/dereferencing/media_test.go
+++ b/internal/federation/dereferencing/media_test.go
@@ -66,7 +66,7 @@ func (suite *AttachmentTestSuite) TestDereferenceAttachmentBlocking() {
suite.NotEmpty(attachment.ID)
suite.NotEmpty(attachment.CreatedAt)
suite.NotEmpty(attachment.UpdatedAt)
- suite.Equal(1.336546184738956, attachment.FileMeta.Original.Aspect)
+ suite.EqualValues(1.3365462, attachment.FileMeta.Original.Aspect)
suite.Equal(2071680, attachment.FileMeta.Original.Size)
suite.Equal(1245, attachment.FileMeta.Original.Height)
suite.Equal(1664, attachment.FileMeta.Original.Width)
@@ -92,7 +92,7 @@ func (suite *AttachmentTestSuite) TestDereferenceAttachmentBlocking() {
suite.NotEmpty(dbAttachment.ID)
suite.NotEmpty(dbAttachment.CreatedAt)
suite.NotEmpty(dbAttachment.UpdatedAt)
- suite.Equal(1.336546184738956, dbAttachment.FileMeta.Original.Aspect)
+ suite.EqualValues(1.3365462, dbAttachment.FileMeta.Original.Aspect)
suite.Equal(2071680, dbAttachment.FileMeta.Original.Size)
suite.Equal(1245, dbAttachment.FileMeta.Original.Height)
suite.Equal(1664, dbAttachment.FileMeta.Original.Width)
@@ -147,7 +147,7 @@ func (suite *AttachmentTestSuite) TestDereferenceAttachmentAsync() {
suite.NotEmpty(attachment.ID)
suite.NotEmpty(attachment.CreatedAt)
suite.NotEmpty(attachment.UpdatedAt)
- suite.Equal(1.336546184738956, attachment.FileMeta.Original.Aspect)
+ suite.EqualValues(1.3365462, attachment.FileMeta.Original.Aspect)
suite.Equal(2071680, attachment.FileMeta.Original.Size)
suite.Equal(1245, attachment.FileMeta.Original.Height)
suite.Equal(1664, attachment.FileMeta.Original.Width)
diff --git a/internal/gtserror/multi.go b/internal/gtserror/multi.go
new file mode 100644
index 00000000..1740d726
--- /dev/null
+++ b/internal/gtserror/multi.go
@@ -0,0 +1,45 @@
+/*
+ GoToSocial
+ Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package gtserror
+
+import (
+ "errors"
+ "fmt"
+ "strings"
+)
+
+// MultiError allows encapsulating multiple errors under a singular instance,
+// which is useful when you only want to log on errors, not return early / bubble up.
+type MultiError []string
+
+func (e *MultiError) Append(err error) {
+ *e = append(*e, err.Error())
+}
+
+func (e *MultiError) Appendf(format string, args ...any) {
+ *e = append(*e, fmt.Sprintf(format, args...))
+}
+
+// Combine converts this multiError to a singular error instance, returning nil if empty.
+func (e MultiError) Combine() error {
+ if len(e) == 0 {
+ return nil
+ }
+ return errors.New(`"` + strings.Join(e, `","`) + `"`)
+}
diff --git a/internal/gtsmodel/mediaattachment.go b/internal/gtsmodel/mediaattachment.go
index 915f5fb2..6d1eee8d 100644
--- a/internal/gtsmodel/mediaattachment.go
+++ b/internal/gtsmodel/mediaattachment.go
@@ -99,15 +99,18 @@ type Small struct {
Width int `validate:"required_with=Height Size Aspect"` // width in pixels
Height int `validate:"required_with=Width Size Aspect"` // height in pixels
Size int `validate:"required_with=Width Height Aspect"` // size in pixels (width * height)
- Aspect float64 `validate:"required_with=Widhth Height Size"` // aspect ratio (width / height)
+ Aspect float32 `validate:"required_with=Width Height Size"` // aspect ratio (width / height)
}
// Original can be used for original metadata for any media type
type Original struct {
- Width int `validate:"required_with=Height Size Aspect"` // width in pixels
- Height int `validate:"required_with=Width Size Aspect"` // height in pixels
- Size int `validate:"required_with=Width Height Aspect"` // size in pixels (width * height)
- Aspect float64 `validate:"required_with=Widhth Height Size"` // aspect ratio (width / height)
+ Width int `validate:"required_with=Height Size Aspect"` // width in pixels
+ Height int `validate:"required_with=Width Size Aspect"` // height in pixels
+ Size int `validate:"required_with=Width Height Aspect"` // size in pixels (width * height)
+ Aspect float32 `validate:"required_with=Width Height Size"` // aspect ratio (width / height)
+ Duration *float32 `validate:"-"` // video-specific: duration of the video in seconds
+ Framerate *float32 `validate:"-"` // video-specific: fps
+ Bitrate *uint64 `validate:"-"` // video-specific: bitrate
}
// Focus describes the 'center' of the image for display purposes.
diff --git a/internal/media/image.go b/internal/media/image.go
index aedac570..a0309893 100644
--- a/internal/media/image.go
+++ b/internal/media/image.go
@@ -48,7 +48,7 @@ func decodeGif(r io.Reader) (*mediaMeta, error) {
width := gif.Config.Width
height := gif.Config.Height
size := width * height
- aspect := float64(width) / float64(height)
+ aspect := float32(width) / float32(height)
return &mediaMeta{
width: width,
@@ -85,7 +85,7 @@ func decodeImage(r io.Reader, contentType string) (*mediaMeta, error) {
width := i.Bounds().Size().X
height := i.Bounds().Size().Y
size := width * height
- aspect := float64(width) / float64(height)
+ aspect := float32(width) / float32(height)
return &mediaMeta{
width: width,
@@ -167,7 +167,7 @@ func deriveThumbnailFromImage(r io.Reader, contentType string, createBlurhash bo
thumbX := thumb.Bounds().Size().X
thumbY := thumb.Bounds().Size().Y
size := thumbX * thumbY
- aspect := float64(thumbX) / float64(thumbY)
+ aspect := float32(thumbX) / float32(thumbY)
im := &mediaMeta{
width: thumbX,
diff --git a/internal/media/manager_test.go b/internal/media/manager_test.go
index f9361a83..c61bdae2 100644
--- a/internal/media/manager_test.go
+++ b/internal/media/manager_test.go
@@ -407,9 +407,13 @@ func (suite *ManagerTestSuite) TestSlothVineProcessBlocking() {
suite.Equal(accountID, attachment.AccountID)
// file meta should be correctly derived from the video
- suite.EqualValues(gtsmodel.Original{
- Width: 338, Height: 240, Size: 81120, Aspect: 1.4083333333333334,
- }, attachment.FileMeta.Original)
+ suite.Equal(338, attachment.FileMeta.Original.Width)
+ suite.Equal(240, attachment.FileMeta.Original.Height)
+ suite.Equal(81120, attachment.FileMeta.Original.Size)
+ suite.EqualValues(1.4083333, attachment.FileMeta.Original.Aspect)
+ suite.EqualValues(6.5862, *attachment.FileMeta.Original.Duration)
+ suite.EqualValues(29.000029, *attachment.FileMeta.Original.Framerate)
+ suite.EqualValues(0x3b3e1, *attachment.FileMeta.Original.Bitrate)
suite.EqualValues(gtsmodel.Small{
Width: 338, Height: 240, Size: 81120, Aspect: 1.4083333333333334,
}, attachment.FileMeta.Small)
@@ -448,6 +452,108 @@ func (suite *ManagerTestSuite) TestSlothVineProcessBlocking() {
suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes)
}
+func (suite *ManagerTestSuite) TestLongerMp4ProcessBlocking() {
+ ctx := context.Background()
+
+ data := func(_ context.Context) (io.ReadCloser, int64, error) {
+ // load bytes from a test video
+ b, err := os.ReadFile("./test/longer-mp4-original.mp4")
+ if err != nil {
+ panic(err)
+ }
+ return io.NopCloser(bytes.NewBuffer(b)), int64(len(b)), nil
+ }
+
+ accountID := "01FS1X72SK9ZPW0J1QQ68BD264"
+
+ // process the media with no additional info provided
+ processingMedia, err := suite.manager.ProcessMedia(ctx, data, nil, accountID, nil)
+ suite.NoError(err)
+ // fetch the attachment id from the processing media
+ attachmentID := processingMedia.AttachmentID()
+
+ // do a blocking call to fetch the attachment
+ attachment, err := processingMedia.LoadAttachment(ctx)
+ suite.NoError(err)
+ suite.NotNil(attachment)
+
+ // make sure it's got the stuff set on it that we expect
+ // the attachment ID and accountID we expect
+ suite.Equal(attachmentID, attachment.ID)
+ suite.Equal(accountID, attachment.AccountID)
+
+ // file meta should be correctly derived from the video
+ suite.Equal(600, attachment.FileMeta.Original.Width)
+ suite.Equal(330, attachment.FileMeta.Original.Height)
+ suite.Equal(198000, attachment.FileMeta.Original.Size)
+ suite.EqualValues(1.8181819, attachment.FileMeta.Original.Aspect)
+ suite.EqualValues(16.6, *attachment.FileMeta.Original.Duration)
+ suite.EqualValues(10, *attachment.FileMeta.Original.Framerate)
+ suite.EqualValues(0xc8fb, *attachment.FileMeta.Original.Bitrate)
+ suite.EqualValues(gtsmodel.Small{
+ Width: 600, Height: 330, Size: 198000, Aspect: 1.8181819,
+ }, attachment.FileMeta.Small)
+ suite.Equal("video/mp4", attachment.File.ContentType)
+ suite.Equal("image/jpeg", attachment.Thumbnail.ContentType)
+ suite.Equal(109549, attachment.File.FileSize)
+ suite.Equal("", attachment.Blurhash)
+
+ // now make sure the attachment is in the database
+ dbAttachment, err := suite.db.GetAttachmentByID(ctx, attachmentID)
+ suite.NoError(err)
+ suite.NotNil(dbAttachment)
+
+ // make sure the processed file is in storage
+ processedFullBytes, err := suite.storage.Get(ctx, attachment.File.Path)
+ suite.NoError(err)
+ suite.NotEmpty(processedFullBytes)
+
+ // load the processed bytes from our test folder, to compare
+ processedFullBytesExpected, err := os.ReadFile("./test/longer-mp4-processed.mp4")
+ suite.NoError(err)
+ suite.NotEmpty(processedFullBytesExpected)
+
+ // the bytes in storage should be what we expected
+ suite.Equal(processedFullBytesExpected, processedFullBytes)
+
+ // now do the same for the thumbnail and make sure it's what we expected
+ processedThumbnailBytes, err := suite.storage.Get(ctx, attachment.Thumbnail.Path)
+ suite.NoError(err)
+ suite.NotEmpty(processedThumbnailBytes)
+
+ processedThumbnailBytesExpected, err := os.ReadFile("./test/longer-mp4-thumbnail.jpg")
+ suite.NoError(err)
+ suite.NotEmpty(processedThumbnailBytesExpected)
+
+ suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes)
+}
+
+func (suite *ManagerTestSuite) TestNotAnMp4ProcessBlocking() {
+ // try to load an 'mp4' that's actually an mkv in disguise
+
+ ctx := context.Background()
+
+ data := func(_ context.Context) (io.ReadCloser, int64, error) {
+ // load bytes from a test video
+ b, err := os.ReadFile("./test/not-an.mp4")
+ if err != nil {
+ panic(err)
+ }
+ return io.NopCloser(bytes.NewBuffer(b)), int64(len(b)), nil
+ }
+
+ accountID := "01FS1X72SK9ZPW0J1QQ68BD264"
+
+ // pre processing should go fine but...
+ processingMedia, err := suite.manager.ProcessMedia(ctx, data, nil, accountID, nil)
+ suite.NoError(err)
+
+ // we should get an error while loading
+ attachment, err := processingMedia.LoadAttachment(ctx)
+ suite.EqualError(err, "\"video width could not be discovered\",\"video height could not be discovered\",\"video duration could not be discovered\",\"video framerate could not be discovered\",\"video bitrate could not be discovered\"")
+ suite.Nil(attachment)
+}
+
func (suite *ManagerTestSuite) TestSimpleJpegProcessBlockingNoContentLengthGiven() {
ctx := context.Background()
diff --git a/internal/media/processingmedia.go b/internal/media/processingmedia.go
index a7ea4dba..f22102d6 100644
--- a/internal/media/processingmedia.go
+++ b/internal/media/processingmedia.go
@@ -249,16 +249,32 @@ func (p *ProcessingMedia) loadFullSize(ctx context.Context) error {
}
// set appropriate fields on the attachment based on the image we derived
+
+ // generic fields
+ p.attachment.File.UpdatedAt = time.Now()
p.attachment.FileMeta.Original = gtsmodel.Original{
Width: decoded.width,
Height: decoded.height,
Size: decoded.size,
Aspect: decoded.aspect,
}
- p.attachment.File.UpdatedAt = time.Now()
- p.attachment.Processing = gtsmodel.ProcessingStatusProcessed
+
+ // nullable fields
+ if decoded.duration != 0 {
+ i := decoded.duration
+ p.attachment.FileMeta.Original.Duration = &i
+ }
+ if decoded.framerate != 0 {
+ i := decoded.framerate
+ p.attachment.FileMeta.Original.Framerate = &i
+ }
+ if decoded.bitrate != 0 {
+ i := decoded.bitrate
+ p.attachment.FileMeta.Original.Bitrate = &i
+ }
// we're done processing the full-size image
+ p.attachment.Processing = gtsmodel.ProcessingStatusProcessed
atomic.StoreInt32(&p.fullSizeState, int32(complete))
log.Tracef("finished processing full size image for attachment %s", p.attachment.URL)
fallthrough
diff --git a/internal/media/test/longer-mp4-original.mp4 b/internal/media/test/longer-mp4-original.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..cfb596612fc93880c2d961de13cbce4d98e9141c
GIT binary patch
literal 109549
zcmX_lV|XS_&~9wow)4c+#
(
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