diff --git a/src/Lib/Audio.hh b/src/Lib/Audio.hh
index 3a7ad817e1a6c65d76b36c7084b8098d1e6f63eb..ee0efab5dcd5714d34d100f531a48eb673397b6b 100644
--- a/src/Lib/Audio.hh
+++ b/src/Lib/Audio.hh
@@ -37,24 +37,17 @@ public:
     class Stream final {
         VIVY_UNMOVABLE_OBJECT(Stream)
 
-        // All the needed deleters
-        static inline constexpr auto codecContexteleter = [](AVCodecContext *ptr) noexcept -> void {
-            if (ptr)
-                avcodec_free_context(&ptr);
-        };
-        static constexpr inline auto dataDeleter = [](double *ptr) noexcept -> void {
-            if (ptr)
-                av_free(ptr);
-        };
-        static constexpr inline auto avFrameDeleter = [](AVFrame *ptr) noexcept -> void {
-            if (ptr)
-                av_frame_free(&ptr);
-        };
-
-        static constexpr inline auto swrContenxtDeleter = [](SwrContext *swr) noexcept -> void {
-            if (swr)
-                swr_free(&swr);
-        };
+        static inline Utils::DeleterFunctionType<double> dataDeleter =
+            std::bind_front(Utils::freePtrIfNotNull<double>, av_free);
+
+        static inline Utils::DeleterFunctionType<AVCodecContext> codecContexteleter =
+            std::bind_front(Utils::freePPtrIfNotNull<AVCodecContext>, avcodec_free_context);
+
+        static inline Utils::DeleterFunctionType<AVFrame> avFrameDeleter =
+            std::bind_front(Utils::freePPtrIfNotNull<AVFrame>, av_frame_free);
+
+        static inline Utils::DeleterFunctionType<SwrContext> swrContenxtDeleter =
+            std::bind_front(Utils::freePPtrIfNotNull<SwrContext>, swr_free);
 
         // All the used types
         using AVCodecContextPtr = std::unique_ptr<AVCodecContext, decltype(codecContexteleter)>;
@@ -135,11 +128,9 @@ public:
 
 private:
     // Regarding the format
-    static inline constexpr auto avFormatContextDeleter =
-        [](AVFormatContext *ptr) noexcept -> void {
-        if (ptr)
-            avformat_free_context(ptr);
-    };
+    static inline Utils::DeleterFunctionType<AVFormatContext> avFormatContextDeleter =
+        std::bind_front(Utils::freePtrIfNotNull<AVFormatContext>, avformat_free_context);
+
     using AVFormatContextPtr = std::unique_ptr<AVFormatContext, decltype(avFormatContextDeleter)>;
     AVFormatContextPtr format{ avformat_alloc_context(), avFormatContextDeleter };
 
diff --git a/src/Lib/Utils.hh b/src/Lib/Utils.hh
index 3f065353973a7ef196098ec3c898e47aad0f7539..bf4d0025163a55cbc68b0b32a032784064c7e0da 100644
--- a/src/Lib/Utils.hh
+++ b/src/Lib/Utils.hh
@@ -172,6 +172,22 @@ QString getBaseName(const QString &) noexcept;
 
 void writeAssertLocation(const char *msg);
 
+template <typename T> using DeleterFunctionType = const std::function<void(T *)>;
+
+template <typename Type> static inline void
+freePtrIfNotNull(DeleterFunctionType<Type> callback, Type *ptr) noexcept
+{
+    if (ptr != nullptr)
+        callback(ptr);
+}
+
+template <typename Type> static inline void
+freePPtrIfNotNull(DeleterFunctionType<Type *> callback, Type *ptr) noexcept
+{
+    if (ptr != nullptr)
+        callback(&ptr);
+}
+
 struct OsSpecificAspects final {
 private:
     OsSpecificAspects() {}