From b44b8d52c1315c2949936a4165679bce86c24fbd Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Wed, 22 Feb 2023 20:58:21 +0100 Subject: [PATCH] WebP: Add support for indexing and playing animations #3197 #668 Signed-off-by: Michael Mayer --- frontend/src/common/caniuse.js | 2 +- frontend/src/model/photo.js | 4 +-- frontend/tests/unit/common/caniuse_test.js | 6 ++-- go.sum | 2 ++ internal/entity/file.go | 7 +++- internal/meta/data.go | 2 +- internal/photoprism/convert_image.go | 2 +- internal/photoprism/convert_image_jpeg.go | 6 ++-- internal/photoprism/convert_image_png.go | 6 ++-- internal/photoprism/convert_video_avc.go | 28 ++++++++++----- internal/photoprism/convert_video_avc_test.go | 30 ++++++++++++++-- internal/photoprism/mediafile.go | 11 ++++-- internal/photoprism/mediafile_related.go | 2 +- internal/photoprism/mediafile_test.go | 19 ++++++++++ internal/photoprism/testdata/windows95.webp | Bin 0 -> 47544 bytes .../photoprism/testdata/windows95.webp.json | 21 +++++++++++ pkg/fs/file_ext.go | 1 + pkg/fs/file_type.go | 4 +-- pkg/fs/file_type_test.go | 33 ++++++++++-------- pkg/fs/file_types.go | 1 + 20 files changed, 139 insertions(+), 48 deletions(-) create mode 100644 internal/photoprism/testdata/windows95.webp create mode 100644 internal/photoprism/testdata/windows95.webp.json diff --git a/frontend/src/common/caniuse.js b/frontend/src/common/caniuse.js index d45b46e59..036faac12 100644 --- a/frontend/src/common/caniuse.js +++ b/frontend/src/common/caniuse.js @@ -39,7 +39,7 @@ export const canUseVP9 = canUseVideo // WebM VP9 export const canUseAv1 = canUseVideo // AV1, Main Profile, Level 4.0 Main Tier, 8-bit ? !!document.createElement("video").canPlayType('video/webm; codecs="av01.0.08M.08"') : false; -export const canUseWebm = canUseVideo +export const canUseWebM = canUseVideo ? !!document.createElement("video").canPlayType("video/webm") : false; export const canUseHevc = canUseVideo diff --git a/frontend/src/model/photo.js b/frontend/src/model/photo.js index e28507e3c..6c5b220e4 100644 --- a/frontend/src/model/photo.js +++ b/frontend/src/model/photo.js @@ -37,7 +37,7 @@ import { $gettext } from "common/vm"; import Clipboard from "common/clipboard"; import download from "common/download"; import * as src from "common/src"; -import { canUseOGV, canUseVP8, canUseVP9, canUseAv1, canUseWebm, canUseHevc } from "common/caniuse"; +import { canUseOGV, canUseVP8, canUseVP9, canUseAv1, canUseWebM, canUseHevc } from "common/caniuse"; export const CodecOGV = "ogv"; export const CodecVP8 = "vp8"; @@ -500,7 +500,7 @@ export class Photo extends RestModel { videoFormat = CodecVP9; } else if (canUseAv1 && file.Codec === CodecAv1) { videoFormat = FormatAv1; - } else if (canUseWebm && file.FileType === FormatWebM) { + } else if (canUseWebM && file.FileType === FormatWebM) { videoFormat = FormatWebM; } diff --git a/frontend/tests/unit/common/caniuse_test.js b/frontend/tests/unit/common/caniuse_test.js index a03754e4f..7e4daaf93 100644 --- a/frontend/tests/unit/common/caniuse_test.js +++ b/frontend/tests/unit/common/caniuse_test.js @@ -7,7 +7,7 @@ import { canUseVideo, canUseVP8, canUseVP9, - canUseWebm, + canUseWebM, } from "common/caniuse"; let chai = require("chai/chai"); @@ -38,8 +38,8 @@ describe("common/caniuse", () => { assert.equal(canUseAv1, true); }); - it("canUseWebm", () => { - assert.equal(canUseWebm, true); + it("canUseWebM", () => { + assert.equal(canUseWebM, true); }); it("canUseHevc", () => { diff --git a/go.sum b/go.sum index 97fe7f88c..5b5191d78 100644 --- a/go.sum +++ b/go.sum @@ -117,6 +117,8 @@ github.com/dsoprea/go-utility/v2 v2.0.0-20221003142440-7a1927d49d9d/go.mod h1:LV github.com/dsoprea/go-utility/v2 v2.0.0-20221003160719-7bc88537c05e/go.mod h1:VZ7cB0pTjm1ADBWhJUOHESu4ZYy9JN+ZPqjfiW09EPU= github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 h1:DilThiXje0z+3UQ5YjYiSRRzVdtamFpvBQXKwMglWqw= github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349/go.mod h1:4GC5sXji84i/p+irqghpPFZBF8tRN/Q7+700G0/DLe8= +github.com/dsoprea/go-webp-image-structure v0.0.0 h1:n7yGn01OL0U1M494TDY7Hwr5b1180AUyhOCwZiwlZUs= +github.com/dsoprea/go-webp-image-structure v0.0.0/go.mod h1:gnr1kACXpLVe19Swg3zgmGhTCj3cp+MU3RkQYiGh47Q= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= diff --git a/internal/entity/file.go b/internal/entity/file.go index 99342cbb5..1f48a2cb1 100644 --- a/internal/entity/file.go +++ b/internal/entity/file.go @@ -555,6 +555,11 @@ func (m *File) NoPNG() bool { return fs.ImagePNG.NotEqual(m.FileType) } +// Type returns the file type. +func (m *File) Type() fs.Type { + return fs.Type(m.FileType) +} + // Links returns all share links for this entity. func (m *File) Links() Links { return FindLinks("", m.FileUID) @@ -617,7 +622,7 @@ func (m *File) HasWatermark() bool { // IsAnimated returns true if the file has animated image frames. func (m *File) IsAnimated() bool { - return m.FileFrames > 1 && media.Image.Equal(m.MediaType) + return (m.FileFrames > 1 || m.FileDuration > 0) && media.Image.Equal(m.MediaType) } // ColorProfile returns the ICC color profile name if any. diff --git a/internal/meta/data.go b/internal/meta/data.go index 2e33e4e37..90ba55d35 100644 --- a/internal/meta/data.go +++ b/internal/meta/data.go @@ -26,7 +26,7 @@ type Data struct { Duration time.Duration `meta:"Duration,MediaDuration,TrackDuration,PreviewDuration"` FPS float64 `meta:"VideoFrameRate,VideoAvgFrameRate"` Frames int `meta:"FrameCount,AnimationFrames"` - Codec string `meta:"CompressorID,VideoCodecID,CodecID,OtherFormat,MajorBrand,FileType"` + Codec string `meta:"CompressorID,VideoCodecID,CodecID,OtherFormat,FileType"` Title string `meta:"Headline,Title" xmp:"dc:title" dc:"title,title.Alt"` Subject string `meta:"Subject,PersonInImage,ObjectName,HierarchicalSubject,CatalogSets" xmp:"Subject"` Keywords Keywords `meta:"Keywords"` diff --git a/internal/photoprism/convert_image.go b/internal/photoprism/convert_image.go index ff727cf12..4dba71cb6 100644 --- a/internal/photoprism/convert_image.go +++ b/internal/photoprism/convert_image.go @@ -99,7 +99,7 @@ func (c *Convert) ToImage(f *MediaFile, force bool) (*MediaFile, error) { if err == nil { log.Infof("convert: %s created in %s (%s)", clean.Log(filepath.Base(imageName)), time.Since(start), f.FileType()) return NewMediaFile(imageName) - } else if !f.IsTIFF() { + } else if !f.IsTIFF() && !f.IsWebP() { // See https://github.com/photoprism/photoprism/issues/1612 // for TIFF file format compatibility. return nil, err diff --git a/internal/photoprism/convert_image_jpeg.go b/internal/photoprism/convert_image_jpeg.go index c3f4d2b7c..18e539fc2 100644 --- a/internal/photoprism/convert_image_jpeg.go +++ b/internal/photoprism/convert_image_jpeg.go @@ -22,12 +22,12 @@ func (c *Convert) JpegConvertCommands(f *MediaFile, jpegName string, xmpName str maxSize := strconv.Itoa(c.conf.JpegSize()) // Apple Scriptable image processing system: https://ss64.com/osx/sips.html - if (f.IsRaw() || f.IsHEIC() || f.IsAVIF()) && c.conf.SipsEnabled() && c.sipsBlacklist.Allow(fileExt) { + if (f.IsRaw() || f.IsHEIF()) && c.conf.SipsEnabled() && c.sipsBlacklist.Allow(fileExt) { result = append(result, exec.Command(c.conf.SipsBin(), "-Z", maxSize, "-s", "format", "jpeg", "--out", jpegName, f.FileName())) } // Extract a still image to be used as preview. - if f.IsAnimated() && c.conf.FFmpegEnabled() { + if f.IsAnimated() && !f.IsWebP() && c.conf.FFmpegEnabled() { // Use "ffmpeg" to extract a JPEG still image from the video. result = append(result, exec.Command(c.conf.FFmpegBin(), "-y", "-i", f.FileName(), "-ss", ffmpeg.PreviewTimeOffset(f.Duration()), "-vframes", "1", jpegName)) } @@ -95,7 +95,7 @@ func (c *Convert) JpegConvertCommands(f *MediaFile, jpegName string, xmpName str // Try ImageMagick for other image file formats if allowed. if c.conf.ImageMagickEnabled() && c.imagemagickBlacklist.Allow(fileExt) && - (f.IsImage() && !f.IsJpegXL() && !f.IsRaw() && !f.IsAnimated() || f.IsVector() && c.conf.VectorEnabled()) { + (f.IsImage() && !f.IsJpegXL() && !f.IsRaw() && !f.IsHEIF() || f.IsVector() && c.conf.VectorEnabled()) { quality := fmt.Sprintf("%d", c.conf.JpegQuality()) resize := fmt.Sprintf("%dx%d>", c.conf.JpegSize(), c.conf.JpegSize()) args := []string{f.FileName(), "-flatten", "-resize", resize, "-quality", quality, jpegName} diff --git a/internal/photoprism/convert_image_png.go b/internal/photoprism/convert_image_png.go index d7511a37a..f1322f8c6 100644 --- a/internal/photoprism/convert_image_png.go +++ b/internal/photoprism/convert_image_png.go @@ -21,12 +21,12 @@ func (c *Convert) PngConvertCommands(f *MediaFile, pngName string) (result []*ex maxSize := strconv.Itoa(c.conf.PngSize()) // Apple Scriptable image processing system: https://ss64.com/osx/sips.html - if (f.IsRaw() || f.IsHEIC() || f.IsAVIF()) && c.conf.SipsEnabled() && c.sipsBlacklist.Allow(fileExt) { + if (f.IsRaw() || f.IsHEIF()) && c.conf.SipsEnabled() && c.sipsBlacklist.Allow(fileExt) { result = append(result, exec.Command(c.conf.SipsBin(), "-Z", maxSize, "-s", "format", "png", "--out", pngName, f.FileName())) } // Extract a video still image that can be used as preview. - if f.IsAnimated() && c.conf.FFmpegEnabled() { + if f.IsAnimated() && !f.IsWebP() && c.conf.FFmpegEnabled() { // Use "ffmpeg" to extract a PNG still image from the video. result = append(result, exec.Command(c.conf.FFmpegBin(), "-y", "-i", f.FileName(), "-ss", ffmpeg.PreviewTimeOffset(f.Duration()), "-vframes", "1", pngName)) } @@ -43,7 +43,7 @@ func (c *Convert) PngConvertCommands(f *MediaFile, pngName string) (result []*ex // Try ImageMagick for other image file formats if allowed. if c.conf.ImageMagickEnabled() && c.imagemagickBlacklist.Allow(fileExt) && - (f.IsImage() && !f.IsJpegXL() && !f.IsRaw() && !f.IsAnimated() || f.IsVector() && c.conf.VectorEnabled()) { + (f.IsImage() && !f.IsJpegXL() && !f.IsRaw() && !f.IsHEIF() || f.IsVector() && c.conf.VectorEnabled()) { resize := fmt.Sprintf("%dx%d>", c.conf.PngSize(), c.conf.PngSize()) args := []string{f.FileName(), "-flatten", "-resize", resize, pngName} result = append(result, exec.Command(c.conf.ImageMagickBin(), args...)) diff --git a/internal/photoprism/convert_video_avc.go b/internal/photoprism/convert_video_avc.go index 3a6577f10..409b33a25 100644 --- a/internal/photoprism/convert_video_avc.go +++ b/internal/photoprism/convert_video_avc.go @@ -41,12 +41,13 @@ func (c *Convert) ToAvc(f *MediaFile, encoder ffmpeg.AvcEncoder, noMutex, force return nil, fmt.Errorf("convert: transcoding disabled in read-only mode (%s)", f.RootRelName()) } - if c.conf.DisableFFmpeg() { - return nil, fmt.Errorf("convert: ffmpeg is disabled for transcoding %s", f.RootRelName()) - } - fileName := f.RelName(c.conf.OriginalsPath()) - avcName = fs.FileName(f.FileName(), c.conf.SidecarPath(), c.conf.OriginalsPath(), fs.ExtAVC) + + if f.IsAnimatedImage() { + avcName = fs.FileName(f.FileName(), c.conf.SidecarPath(), c.conf.OriginalsPath(), fs.ExtMP4) + } else { + avcName = fs.FileName(f.FileName(), c.conf.SidecarPath(), c.conf.OriginalsPath(), fs.ExtAVC) + } cmd, useMutex, err := c.AvcConvertCommand(f, avcName, encoder) @@ -131,6 +132,7 @@ func (c *Convert) ToAvc(f *MediaFile, encoder ffmpeg.AvcEncoder, noMutex, force // AvcConvertCommand returns the command for converting video files to MPEG-4 AVC. func (c *Convert) AvcConvertCommand(f *MediaFile, avcName string, encoder ffmpeg.AvcEncoder) (result *exec.Cmd, useMutex bool, err error) { + fileExt := f.Extension() fileName := f.FileName() bitrate := c.AvcBitrate(f) ffmpegBin := c.conf.FFmpegBin() @@ -140,14 +142,22 @@ func (c *Convert) AvcConvertCommand(f *MediaFile, avcName string, encoder ffmpeg return nil, false, fmt.Errorf("convert: %s video filename is empty - possible bug", f.FileType()) case bitrate == "": return nil, false, fmt.Errorf("convert: transcoding bitrate is empty - possible bug") - case ffmpegBin == "": - return nil, false, fmt.Errorf("convert: ffmpeg must be installed to transcode %s", clean.Log(f.BaseName())) - case c.conf.DisableFFmpeg(): - return nil, false, fmt.Errorf("convert: ffmpeg must be enabled to transcode %s", clean.Log(f.BaseName())) case !f.IsAnimated(): return nil, false, fmt.Errorf("convert: file type %s of %s cannot be transcoded", f.FileType(), clean.Log(f.BaseName())) } + // Transcode animated WebP images with ImageMagick. + if f.IsWebP() && c.conf.ImageMagickEnabled() && c.imagemagickBlacklist.Allow(fileExt) { + return exec.Command(c.conf.ImageMagickBin(), f.FileName(), avcName), false, nil + } + + // Transcode all other formats with FFmpeg. + if ffmpegBin == "" { + return nil, false, fmt.Errorf("convert: ffmpeg must be installed to transcode %s", clean.Log(f.BaseName())) + } else if c.conf.DisableFFmpeg() { + return nil, false, fmt.Errorf("convert: ffmpeg must be enabled to transcode %s", clean.Log(f.BaseName())) + } + return ffmpeg.AvcConvertCommand(fileName, avcName, ffmpegBin, c.AvcBitrate(f), encoder) } diff --git a/internal/photoprism/convert_video_avc_test.go b/internal/photoprism/convert_video_avc_test.go index 44813ae11..365717553 100644 --- a/internal/photoprism/convert_video_avc_test.go +++ b/internal/photoprism/convert_video_avc_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/photoprism/photoprism/internal/config" + "github.com/photoprism/photoprism/internal/ffmpeg" "github.com/photoprism/photoprism/pkg/fs" ) @@ -140,7 +141,7 @@ func TestConvert_AvcConvertCommand(t *testing.T) { conf := config.TestConfig() convert := NewConvert(conf) - t.Run(".mp4", func(t *testing.T) { + t.Run("MP4", func(t *testing.T) { fileName := filepath.Join(conf.ExamplesPath(), "gopher-video.mp4") mf, err := NewMediaFile(fileName) @@ -153,10 +154,11 @@ func TestConvert_AvcConvertCommand(t *testing.T) { if err != nil { t.Fatal(err) } + assert.Contains(t, r.Path, "ffmpeg") assert.Contains(t, r.Args, "mp4") }) - t.Run(".jpg", func(t *testing.T) { + t.Run("JPEG", func(t *testing.T) { fileName := filepath.Join(conf.ExamplesPath(), "cat_black.jpg") mf, err := NewMediaFile(fileName) @@ -164,8 +166,30 @@ func TestConvert_AvcConvertCommand(t *testing.T) { t.Fatal(err) } - r, _, err := convert.AvcConvertCommand(mf, "avc1", "") + r, useMutex, err := convert.AvcConvertCommand(mf, "avc1", "") + + assert.False(t, useMutex) assert.Error(t, err) assert.Nil(t, r) }) + t.Run("WebP", func(t *testing.T) { + webpName := "testdata/windows95.webp" + avcName := "windows95.mp4" + mf, err := NewMediaFile(webpName) + + if err != nil { + t.Fatal(err) + } + + r, useMutex, err := convert.AvcConvertCommand(mf, avcName, ffmpeg.SoftwareEncoder) + + if err != nil { + t.Fatal(err) + } + + assert.False(t, useMutex) + assert.Contains(t, r.Path, "convert") + assert.Contains(t, r.Args, webpName) + assert.Contains(t, r.Args, avcName) + }) } diff --git a/internal/photoprism/mediafile.go b/internal/photoprism/mediafile.go index 1bf86e4b4..385d5ae32 100644 --- a/internal/photoprism/mediafile.go +++ b/internal/photoprism/mediafile.go @@ -678,7 +678,12 @@ func (m *MediaFile) IsDNG() bool { return m.MimeType() == fs.MimeTypeDNG } -// IsHEIC checks if the file is a High Efficiency Image File Format (HEIC/HEIF) image with a supported file type extension. +// IsHEIF checks if the file is a High Efficiency Image File Format (HEIF) container with a supported file type extension. +func (m *MediaFile) IsHEIF() bool { + return m.IsHEIC() || m.IsHEICS() || m.IsAVIF() || m.IsAVIFS() +} + +// IsHEIC checks if the file is a High Efficiency Image Container (HEIC) image with a supported file type extension. func (m *MediaFile) IsHEIC() bool { if t := fs.FileType(m.fileName); t != fs.ImageHEIF && t != fs.ImageHEIC { return false @@ -735,7 +740,7 @@ func (m *MediaFile) Duration() time.Duration { // IsAnimatedImage checks if the file is an animated image. func (m *MediaFile) IsAnimatedImage() bool { - return fs.FileAnimated(m.fileName) && (m.MetaData().Frames > 1 || m.MetaData().Duration > 0) + return fs.IsAnimatedImage(m.fileName) && (m.MetaData().Frames > 1 || m.MetaData().Duration > 0) } // IsJSON checks if the file is a JSON sidecar file with a supported file type extension. @@ -869,7 +874,7 @@ func (m *MediaFile) IsLive() bool { // ExifSupported returns true if parsing exif metadata is supported for the media file type. func (m *MediaFile) ExifSupported() bool { - return m.IsJpeg() || m.IsRaw() || m.IsHEIC() || m.IsHEICS() || m.IsAVIF() || m.IsAVIFS() || m.IsPNG() || m.IsTIFF() + return m.IsJpeg() || m.IsRaw() || m.IsHEIF() || m.IsPNG() || m.IsTIFF() } // IsMedia returns true if this is a media file (photo or video, not sidecar or other). diff --git a/internal/photoprism/mediafile_related.go b/internal/photoprism/mediafile_related.go index e9ddcd2dd..5923c78ad 100644 --- a/internal/photoprism/mediafile_related.go +++ b/internal/photoprism/mediafile_related.go @@ -87,7 +87,7 @@ func (m *MediaFile) RelatedFiles(stripSequence bool) (result RelatedFiles, err e } else if f.IsHEIC() { isHEIC = true result.Main = f - } else if f.IsAVIF() { + } else if f.IsHEIF() { result.Main = f } else if f.IsImage() && !f.IsPreviewImage() { result.Main = f diff --git a/internal/photoprism/mediafile_test.go b/internal/photoprism/mediafile_test.go index 8d01dba88..cff700132 100644 --- a/internal/photoprism/mediafile_test.go +++ b/internal/photoprism/mediafile_test.go @@ -1507,12 +1507,31 @@ func TestMediaFile_IsAnimated(t *testing.T) { assert.Equal(t, true, f.ExifSupported()) assert.Equal(t, false, f.IsVideo()) assert.Equal(t, false, f.IsGIF()) + assert.Equal(t, false, f.IsWebP()) assert.Equal(t, false, f.IsAVIF()) assert.Equal(t, false, f.IsHEIC()) assert.Equal(t, false, f.IsHEICS()) assert.Equal(t, false, f.IsSidecar()) } }) + t.Run("windows95.webp", func(t *testing.T) { + if f, err := NewMediaFile("testdata/windows95.webp"); err != nil { + t.Fatal(err) + } else { + assert.Equal(t, true, f.IsImage()) + assert.Equal(t, true, f.IsWebP()) + assert.Equal(t, true, f.IsAnimated()) + assert.Equal(t, true, f.IsAnimatedImage()) + assert.Equal(t, false, f.ExifSupported()) + assert.Equal(t, false, f.IsVideo()) + assert.Equal(t, false, f.IsGIF()) + assert.Equal(t, false, f.IsAVIF()) + assert.Equal(t, false, f.IsAVIFS()) + assert.Equal(t, false, f.IsHEIC()) + assert.Equal(t, false, f.IsHEICS()) + assert.Equal(t, false, f.IsSidecar()) + } + }) t.Run("example.gif", func(t *testing.T) { if f, err := NewMediaFile(filepath.Join(cnf.ExamplesPath(), "example.gif")); err != nil { t.Fatal(err) diff --git a/internal/photoprism/testdata/windows95.webp b/internal/photoprism/testdata/windows95.webp new file mode 100644 index 0000000000000000000000000000000000000000..e8a852d6bef4f90fc8a0b7f7a6c4404028164e53 GIT binary patch literal 47544 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'G0u&}6NT**T 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