diff --git a/community/ffmpegthumbnailer/APKBUILD b/community/ffmpegthumbnailer/APKBUILD
index f09ee039d5ffe5aa9de91a51018488750c22cb6c..724016166de1e8b197268ea1ce100e7ad9d9886e 100644
--- a/community/ffmpegthumbnailer/APKBUILD
+++ b/community/ffmpegthumbnailer/APKBUILD
@@ -1,17 +1,15 @@
 # Contributor: Stuart Cardall <developer@it-offshore.co.uk>
 # Maintainer: Stuart Cardall <developer@it-offshore.co.uk>
 pkgname=ffmpegthumbnailer
-pkgver=2.2.2
-pkgrel=7
+pkgver=2.2.3
+pkgrel=0
 pkgdesc="Lightweight video thumbnailer that can be used by file managers"
 url="https://github.com/dirkvdb/ffmpegthumbnailer"
 arch="all"
 license="GPL-2.0-or-later"
 makedepends="ffmpeg-dev libpng-dev libjpeg-turbo-dev cmake samurai"
 subpackages="$pkgname-dev $pkgname-doc"
-source="$pkgname-$pkgver.tar.bz2::https://github.com/dirkvdb/ffmpegthumbnailer/releases/download/$pkgver/ffmpegthumbnailer-$pkgver.tar.bz2
-	ffmpeg5.patch
-	"
+source="$pkgname-$pkgver.tar.gz::https://github.com/dirkvdb/ffmpegthumbnailer/archive/refs/tags/$pkgver.tar.gz"
 
 build() {
 	cmake -B build -G Ninja \
@@ -33,6 +31,5 @@ package() {
 }
 
 sha512sums="
-52760dcf59430e5e85024c9f19dc1fac1d5f0edb4f937b33feac2b3ca8f12bbf549b5f658fc16fc07bf773717b9e10048aa3eb24bf52811c5c88c995ef492612  ffmpegthumbnailer-2.2.2.tar.bz2
-f4a28c49ab4b6c3d740d9c0df47e670cfbeff77889f149762d8509dcf10b3fe67107f00615aadef1d7ee1029f99aaed415b1bbf7dc9b14ac332c17b85e79608c  ffmpeg5.patch
+b1299c5ea8ae11ab5dd34bfe74d0b117fcd842f9a41e542120cfcb2faaf7a84f5253eb86951095df9afd7912a0faa921fe0274322cf500b9aed38de366751523  ffmpegthumbnailer-2.2.3.tar.gz
 "
diff --git a/community/ffmpegthumbnailer/ffmpeg5.patch b/community/ffmpegthumbnailer/ffmpeg5.patch
deleted file mode 100644
index e2c8b6acef81f488e996c2c1f3ad8174032eaf2b..0000000000000000000000000000000000000000
--- a/community/ffmpegthumbnailer/ffmpeg5.patch
+++ /dev/null
@@ -1,345 +0,0 @@
-Patch-Source: https://github.com/dirkvdb/ffmpegthumbnailer/commit/efb5b618f1c1471c1a7900aed3a59d851ea9a210
-Patch-Source: https://github.com/dirkvdb/ffmpegthumbnailer/pull/198
-
-From 67be4abd22b726e277c4b67bfb3abf5a65cfd9b5 Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:23:23 +1000
-Subject: [PATCH 1/9] lib/moviedecoder: remove unused variable
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index 290e212..aa44adf 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -570,8 +570,6 @@ bool MovieDecoder::getVideoPacket()
-     bool framesAvailable = true;
-     bool frameDecoded = false;
- 
--    int attempts = 0;
--
-     if (m_pPacket)
-     {
-         av_packet_unref(m_pPacket);
-
-From 66f64668e7a063e790813c7733ca438ab112af89 Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:42:07 +1000
-Subject: [PATCH 2/9] lib/moviedecoder: clang-tidy fixes
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index aa44adf..79c950b 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -503,12 +503,12 @@ void MovieDecoder::seek(int timeInSeconds)
-     avcodec_flush_buffers(m_pFormatContext->streams[m_VideoStream]->codec);
- 
-     int keyFrameAttempts = 0;
--    bool gotFrame = 0;
-+    bool gotFrame;
- 
-     do
-     {
-         int count = 0;
--        gotFrame = 0;
-+        gotFrame = false;
- 
-         while (!gotFrame && count < 20)
-         {
-
-From 96c22aa66719846854895afcb72962862d5a4ffd Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 20:39:32 +1000
-Subject: [PATCH 3/9] lib/moviedecoder: remove SilenceLogLevel
-
-Was unused.
----
- libffmpegthumbnailer/moviedecoder.cpp | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index 79c950b..21df096 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -41,11 +41,6 @@ using namespace std;
- namespace ffmpegthumbnailer
- {
- 
--struct SilenceLogLevel
--{
--    SilenceLogLevel() { av_log_set_level(AV_LOG_QUIET); }
--};
--
- MovieDecoder::MovieDecoder(AVFormatContext* pavContext)
- : m_VideoStream(-1)
- , m_pFormatContext(pavContext)
-
-From 664680f4bfeb89923f485eba270f9e49a8d02bfc Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:25:40 +1000
-Subject: [PATCH 4/9] lib/moviedecoder: remove registration calls
-
-They're not needed anymore.
----
- libffmpegthumbnailer/moviedecoder.cpp | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index 21df096..ac3e5b9 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -65,8 +65,6 @@ MovieDecoder::~MovieDecoder()
- 
- void MovieDecoder::initialize(const string& filename, bool preferEmbeddedMetadata)
- {
--    av_register_all();
--    avcodec_register_all();
-     avformat_network_init();
- 
-     string inputFile = filename == "-" ? "pipe:" : filename;
-@@ -386,8 +384,6 @@ void MovieDecoder::initializeFilterGraph(const AVRational& timeBase, const std::
-     auto del = [] (AVBufferSinkParams* p) { av_freep(p); };
-     std::unique_ptr<AVBufferSinkParams, decltype(del)> buffersinkParams(av_buffersink_params_alloc(), del);
- 
--    avfilter_register_all();
--
-     m_pFilterGraph = avfilter_graph_alloc();
-     assert(m_pFilterGraph);
- 
-
-From 1ae42e664e1f3c915d186ae00aa2c8018b998708 Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:30:21 +1000
-Subject: [PATCH 5/9] lib/moviedecoder: remove use of AVBufferSinkParams
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 9 +--------
- 1 file changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index ac3e5b9..dece668 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -379,11 +379,6 @@ std::string MovieDecoder::createScaleString(const std::string& sizeString, bool
- 
- void MovieDecoder::initializeFilterGraph(const AVRational& timeBase, const std::string& size, bool maintainAspectRatio)
- {
--    static const AVPixelFormat pixelFormats[] = { AV_PIX_FMT_RGB24, AV_PIX_FMT_NONE };
--
--    auto del = [] (AVBufferSinkParams* p) { av_freep(p); };
--    std::unique_ptr<AVBufferSinkParams, decltype(del)> buffersinkParams(av_buffersink_params_alloc(), del);
--
-     m_pFilterGraph = avfilter_graph_alloc();
-     assert(m_pFilterGraph);
- 
-@@ -395,10 +390,8 @@ void MovieDecoder::initializeFilterGraph(const AVRational& timeBase, const std::
- 
-     checkRc(avfilter_graph_create_filter(&m_pFilterSource, avfilter_get_by_name("buffer"), "thumb_buffer", ss.str().c_str(), nullptr, m_pFilterGraph),
-             "Failed to create filter source");
--    buffersinkParams->pixel_fmts = pixelFormats;
--    checkRc(avfilter_graph_create_filter(&m_pFilterSink, avfilter_get_by_name("buffersink"), "thumb_buffersink", nullptr, buffersinkParams.get(), m_pFilterGraph),
-+    checkRc(avfilter_graph_create_filter(&m_pFilterSink, avfilter_get_by_name("buffersink"), "thumb_buffersink", nullptr, nullptr, m_pFilterGraph),
-             "Failed to create filter sink");
--    buffersinkParams.release();
- 
-     AVFilterContext* yadifFilter = nullptr;
-     if (m_pFrame->interlaced_frame != 0)
-
-From 19675349662a4ea4455d7d13b01cca28ab585762 Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:39:58 +1000
-Subject: [PATCH 6/9] lib/moviedecoder: use m_pVideoCodecContext instead of
- AVStream::codec
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index dece668..0b7a280 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -484,7 +484,7 @@ void MovieDecoder::seek(int timeInSeconds)
-     }
- 
-     checkRc(av_seek_frame(m_pFormatContext, -1, timestamp, 0), "Seeking in video failed");
--    avcodec_flush_buffers(m_pFormatContext->streams[m_VideoStream]->codec);
-+    avcodec_flush_buffers(m_pVideoCodecContext);
- 
-     int keyFrameAttempts = 0;
-     bool gotFrame;
-
-From 4f74f83a009fa2b3f3d546adb24d4f1406910007 Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:49:03 +1000
-Subject: [PATCH 7/9] lib/moviedecoder: codec -> codecpar
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index 0b7a280..e58904e 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -145,10 +145,10 @@ int32_t MovieDecoder::findPreferedVideoStream(bool preferEmbeddedMetadata)
-     for (unsigned int i = 0; i < m_pFormatContext->nb_streams; ++i)
-     {
-         AVStream *stream = m_pFormatContext->streams[i];
--        auto ctx = m_pFormatContext->streams[i]->codec;
--        if (ctx->codec_type == AVMEDIA_TYPE_VIDEO)
-+        auto par = m_pFormatContext->streams[i]->codecpar;
-+        if (par->codec_type == AVMEDIA_TYPE_VIDEO)
-         {
--            if (!preferEmbeddedMetadata || !isStillImageCodec(ctx->codec_id))
-+            if (!preferEmbeddedMetadata || !isStillImageCodec(par->codec_id))
-             {
-                 videoStreams.push_back(i);
-                 continue;
-
-From 3ffdd65cbda6ef21d36c96013db1b0f4dc9fc57b Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 17:52:01 +1000
-Subject: [PATCH 8/9] lib/movedecoder: don't rely on avformat to allocate a
- context
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 20 ++++++++++++++++----
- 1 file changed, 16 insertions(+), 4 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index e58904e..da5f32a 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -90,8 +90,7 @@ void MovieDecoder::destroy()
- {
-     if (m_pVideoCodecContext)
-     {
--        avcodec_close(m_pVideoCodecContext);
--        m_pVideoCodecContext = nullptr;
-+        avcodec_free_context(&m_pVideoCodecContext);
-     }
- 
-     if ((!m_FormatContextWasGiven) && m_pFormatContext)
-@@ -196,8 +195,7 @@ void MovieDecoder::initializeVideo(bool preferEmbeddedMetadata)
-     }
- 
-     m_pVideoStream = m_pFormatContext->streams[m_VideoStream];
--    m_pVideoCodecContext = m_pVideoStream->codec;
--    m_pVideoCodec = avcodec_find_decoder(m_pVideoCodecContext->codec_id);
-+    m_pVideoCodec = avcodec_find_decoder(m_pVideoStream->codecpar->codec_id);
- 
-     if (m_pVideoCodec == nullptr)
-     {
-@@ -207,6 +205,20 @@ void MovieDecoder::initializeVideo(bool preferEmbeddedMetadata)
-         throw logic_error("Video Codec not found");
-     }
- 
-+    m_pVideoCodecContext = avcodec_alloc_context3(m_pVideoCodec);
-+
-+    if (m_pVideoCodecContext == nullptr)
-+    {
-+        destroy();
-+        throw logic_error("Could not allocate video codec context");
-+    }
-+
-+    if (avcodec_parameters_to_context(m_pVideoCodecContext, m_pVideoStream->codecpar) < 0)
-+    {
-+        destroy();
-+        throw logic_error("Could not configure video codec context");
-+    }
-+
-     m_pVideoCodecContext->workaround_bugs = 1;
- 
-     if (avcodec_open2(m_pVideoCodecContext, m_pVideoCodec, nullptr) < 0)
-
-From f9273852c8e3d7af77d6c8929b1ac6c8a26eca50 Mon Sep 17 00:00:00 2001
-From: Zane van Iperen <zane@zanevaniperen.com>
-Date: Mon, 15 Mar 2021 20:57:45 +1000
-Subject: [PATCH 9/9] lib/moviedecoder: replace avcodec_decode_video2() usage
-
----
- libffmpegthumbnailer/moviedecoder.cpp | 31 +++++++++++++++++++++------
- 1 file changed, 24 insertions(+), 7 deletions(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.cpp b/libffmpegthumbnailer/moviedecoder.cpp
-index da5f32a..f32577a 100644
---- a/libffmpegthumbnailer/moviedecoder.cpp
-+++ b/libffmpegthumbnailer/moviedecoder.cpp
-@@ -548,17 +548,33 @@ bool MovieDecoder::decodeVideoPacket()
-         return false;
-     }
- 
--    av_frame_unref(m_pFrame);
--
--    int frameFinished;
-+    int rc = avcodec_send_packet(m_pVideoCodecContext, m_pPacket);
-+    if(rc == AVERROR(EAGAIN))
-+    {
-+        rc = 0;
-+    }
- 
--    int bytesDecoded = avcodec_decode_video2(m_pVideoCodecContext, m_pFrame, &frameFinished, m_pPacket);
--    if (bytesDecoded < 0)
-+    if(rc == AVERROR_EOF)
-+    {
-+        return false;
-+    }
-+    else if(rc < 0)
-     {
--        throw logic_error("Failed to decode video frame: bytesDecoded < 0");
-+        throw logic_error("Failed to decode video frame: avcodec_send_packet() < 0");
-     }
- 
--    return frameFinished > 0;
-+    rc = avcodec_receive_frame(m_pVideoCodecContext, m_pFrame);
-+    switch(rc)
-+    {
-+        case 0:
-+            return true;
-+
-+        case AVERROR(EAGAIN):
-+            return false;
-+
-+        default:
-+            throw logic_error("Failed to decode video frame: avcodec_receive_frame() < 0");
-+    }
- }
- 
- bool MovieDecoder::getVideoPacket()
-@@ -574,6 +590,7 @@ bool MovieDecoder::getVideoPacket()
- 
-     m_pPacket = new AVPacket();
- 
-+
-     while (framesAvailable && !frameDecoded)
-     {
-         framesAvailable = av_read_frame(m_pFormatContext, m_pPacket) >= 0;
-From efb5b618f1c1471c1a7900aed3a59d851ea9a210 Mon Sep 17 00:00:00 2001
-From: Paul Jonkins <paul.ionkin@gmail.com>
-Date: Wed, 23 Jun 2021 17:53:55 +0200
-Subject: [PATCH] Constify AVCodec
-
----
- libffmpegthumbnailer/moviedecoder.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libffmpegthumbnailer/moviedecoder.h b/libffmpegthumbnailer/moviedecoder.h
-index 3ef5f12..fb6add2 100644
---- a/libffmpegthumbnailer/moviedecoder.h
-+++ b/libffmpegthumbnailer/moviedecoder.h
-@@ -78,7 +78,7 @@ class MovieDecoder
-     int                     m_VideoStream;
-     AVFormatContext*        m_pFormatContext;
-     AVCodecContext*         m_pVideoCodecContext;
--    AVCodec*                m_pVideoCodec;
-+    const AVCodec*          m_pVideoCodec;
-     AVFilterGraph*          m_pFilterGraph;
-     AVFilterContext*        m_pFilterSource;
-     AVFilterContext*        m_pFilterSink;