diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 11ae3e9..3f36d28 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -1,80 +1,66 @@
 name: Test
 
 on:
-    pull_request: ~
-    push:
-        branches:
-            - 'master'
-    schedule:
-        - cron: "0 0 * * *"
+  pull_request: ~
+  push:
+    branches:
+      - "master"
+  schedule:
+    - cron: "0 0 * * *"
 
 jobs:
-    test:
-        name: "PHP ${{ matrix.php-version }} ${{ matrix.dependency-versions }} ${{ matrix.composer-stability }}"
-        runs-on: ubuntu-latest
+  test:
+    name: "PHP ${{ matrix.php-version }} ${{ matrix.dependency-versions }} ${{ matrix.composer-stability }}"
+    runs-on: ubuntu-latest
 
-        env:
-            PHPUNIT_VERSION: ${{ matrix.phpunit-version }}
+    env:
+      PHPUNIT_VERSION: ${{ matrix.phpunit-version }}
 
-        strategy:
-            fail-fast: false
-            matrix:
-                include:
-                    - php-version: '5.3'
-                      phpunit-version: 4
-                      dependency-versions: 'lowest'
-                    - php-version: '5.4'
-                      phpunit-version: 4
-                    - php-version: '5.5'
-                      phpunit-version: 4
-                    - php-version: '5.6'
-                    - php-version: '7.0'
-                    - php-version: '7.1'
-                    - php-version: '7.2'
-                    - php-version: '7.3'
-                    - php-version: '7.4'
-                    - php-version: '8.0'
-                    - php-version: '8.1'
-                    - php-version: '8.1'
-                      dependency-versions: 'highest'
-                      composer-stability: 'dev'
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-20.04]
+        php-version: [8.1, 8.0, 7.4, 7.3, 7.2, 7.1, 7.0, 5.6, 5.5]
+        dependency-versions: [prefer-lowest, prefer-stable]
+        include:
+          - php-version: 5.5
+            phpunit-version: 4
 
-        steps:
-            - name: Checkout project
-              uses: actions/checkout@v2
+    steps:
+      - name: Checkout project
+        uses: actions/checkout@v2
 
-            - name: Install and configure PHP
-              uses: shivammathur/setup-php@v2
-              with:
-                  php-version: ${{ matrix.php-version }}
-                  tools: composer:v2
-                  coverage: none
+      - name: Install and configure PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: ${{ matrix.php-version }}
+          tools: composer:v2
+          coverage: none
 
-            - name: Install phpunit
-              if: ${{ matrix.phpunit-version }}
-              run: |
-                  composer remove symfony/phpunit-bridge --dev
-                  wget -O phpunit "https://phar.phpunit.de/phpunit-${{ matrix.phpunit-version }}.phar"
-                  chmod +x phpunit
-                  composer require "roave/security-advisories" dev-master --no-update
+      - name: Install phpunit
+        if: ${{ matrix.phpunit-version }}
+        run: |
+          composer remove symfony/phpunit-bridge --dev
+          wget -O phpunit "https://phar.phpunit.de/phpunit-${{ matrix.phpunit-version }}.phar"
+          chmod +x phpunit
+          composer require "roave/security-advisories" dev-master --no-update
 
-            - name: Set composer stability
-              if: ${{ matrix.composer-stability }}
-              run: composer config minimum-stability ${{ matrix.composer-stability }}
+      - name: Set composer stability
+        if: ${{ matrix.composer-stability }}
+        run: composer config minimum-stability ${{ matrix.composer-stability }}
 
-            - name: Install composer dependencies
-              uses: ramsey/composer-install@v1
-              with:
-                  dependency-versions: ${{ matrix.dependency-versions }}
+      - name: Install composer dependencies
+        uses: ramsey/composer-install@v1
+        with:
+          dependency-versions: ${{ matrix.dependency-versions }}
 
-            - name: Install ffmpeg
-              uses: FedericoCarboni/setup-ffmpeg@v1
+      - name: Install ffmpeg
+        uses: FedericoCarboni/setup-ffmpeg@v1
 
-            - name: Run tests
-              if: ${{ matrix.phpunit-version }}
-              run: |
-                  if [ "$PHPUNIT_VERSION" ]; then
-                      ./phpunit --verbose
-                  else
-                      ./vendor/bin/simple-phpunit --verbose
-                  fi;
+      - name: Run tests
+        run: |
+          if [ "$PHPUNIT_VERSION" ]; then
+              ./phpunit --verbose
+          else
+              ./vendor/bin/simple-phpunit --verbose
+          fi;
diff --git a/composer.json b/composer.json
index 7c69847..c2800d7 100644
--- a/composer.json
+++ b/composer.json
@@ -32,11 +32,11 @@
         }
     ],
     "require": {
-        "php": ">=5.3.9",
+        "php": ">=5.5.9",
         "alchemy/binary-driver": "^1.5 || ~2.0.0 || ^5.0",
-        "doctrine/cache": "^1.0|^2.0",
         "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
-        "neutron/temporary-filesystem": "^2.1.1 || ^3.0"
+        "neutron/temporary-filesystem": "^2.1.1 || ^3.0",
+        "symfony/cache": "^3.1 || ^4.0 || ^5.0 || ^6.0"
     },
     "suggest": {
         "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg"
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 8b9403d..feaaa7b 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -12,6 +12,7 @@
 >
     
         
+        
     
 
     
diff --git a/src/FFMpeg/FFMpegServiceProvider.php b/src/FFMpeg/FFMpegServiceProvider.php
index 6aa9735..ab2205a 100644
--- a/src/FFMpeg/FFMpegServiceProvider.php
+++ b/src/FFMpeg/FFMpegServiceProvider.php
@@ -11,9 +11,9 @@
 
 namespace FFMpeg;
 
-use Doctrine\Common\Cache\ArrayCache;
 use Silex\Application;
 use Silex\ServiceProviderInterface;
+use Symfony\Component\Cache\Adapter\ArrayAdapter;
 
 class FFMpegServiceProvider implements ServiceProviderInterface
 {
@@ -44,7 +44,7 @@ class FFMpegServiceProvider implements ServiceProviderInterface
         });
 
         $app['ffprobe.cache'] = $app->share(function () {
-            return new ArrayCache();
+            return new ArrayAdapter;
         });
 
         $app['ffmpeg.ffprobe'] = $app->share(function (Application $app) {
diff --git a/src/FFMpeg/FFProbe.php b/src/FFMpeg/FFProbe.php
index a1a0ba3..8eb7c66 100644
--- a/src/FFMpeg/FFProbe.php
+++ b/src/FFMpeg/FFProbe.php
@@ -13,27 +13,27 @@ namespace FFMpeg;
 
 use Alchemy\BinaryDriver\ConfigurationInterface;
 use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
-use Doctrine\Common\Cache\ArrayCache;
-use Doctrine\Common\Cache\Cache;
 use FFMpeg\Driver\FFProbeDriver;
+use FFMpeg\Exception\InvalidArgumentException;
+use FFMpeg\Exception\RuntimeException;
 use FFMpeg\FFProbe\DataMapping\Format;
+use FFMpeg\FFProbe\DataMapping\StreamCollection;
 use FFMpeg\FFProbe\Mapper;
 use FFMpeg\FFProbe\MapperInterface;
 use FFMpeg\FFProbe\OptionsTester;
 use FFMpeg\FFProbe\OptionsTesterInterface;
 use FFMpeg\FFProbe\OutputParser;
 use FFMpeg\FFProbe\OutputParserInterface;
-use FFMpeg\Exception\InvalidArgumentException;
-use FFMpeg\Exception\RuntimeException;
-use FFMpeg\FFProbe\DataMapping\StreamCollection;
+use Psr\Cache\CacheItemPoolInterface;
 use Psr\Log\LoggerInterface;
+use Symfony\Component\Cache\Adapter\ArrayAdapter;
 
 class FFProbe
 {
     const TYPE_STREAMS = 'streams';
     const TYPE_FORMAT = 'format';
 
-    /** @var Cache */
+    /** @var CacheItemPoolInterface */
     private $cache;
     /** @var OptionsTesterInterface */
     private $optionsTester;
@@ -44,7 +44,7 @@ class FFProbe
     /** @var MapperInterface */
     private $mapper;
 
-    public function __construct(FFProbeDriver $ffprobe, Cache $cache)
+    public function __construct(FFProbeDriver $ffprobe, CacheItemPoolInterface $cache)
     {
         $this->ffprobe = $ffprobe;
         $this->optionsTester = new OptionsTester($ffprobe, $cache);
@@ -114,11 +114,11 @@ class FFProbe
     }
 
     /**
-     * @param Cache $cache
+     * @param CacheItemPoolInterface $cache
      *
      * @return FFProbe
      */
-    public function setCache(Cache $cache)
+    public function setCache(CacheItemPoolInterface $cache)
     {
         $this->cache = $cache;
 
@@ -213,14 +213,14 @@ class FFProbe
      *
      * @param array|ConfigurationInterface $configuration
      * @param LoggerInterface              $logger
-     * @param Cache                        $cache
+     * @param CacheItemPoolInterface       $cache
      *
      * @return FFProbe
      */
-    public static function create($configuration = array(), LoggerInterface $logger = null, Cache $cache = null)
+    public static function create($configuration = array(), LoggerInterface $logger = null, CacheItemPoolInterface $cache = null)
     {
         if (null === $cache) {
-            $cache = new ArrayCache();
+            $cache = new ArrayAdapter();
         }
 
         return new static(FFProbeDriver::create($configuration, $logger), $cache);
@@ -228,10 +228,10 @@ class FFProbe
 
     private function probe($pathfile, $command, $type, $allowJson = true)
     {
-        $id = sprintf('%s-%s', $command, $pathfile);
+        $id = md5(sprintf('%s-%s', $command, $pathfile));
 
-        if ($this->cache->contains($id)) {
-            return $this->cache->fetch($id);
+        if ($this->cache->hasItem($id)) {
+            return $this->cache->getItem($id)->get();
         }
 
         if (!$this->optionsTester->has($command)) {
@@ -276,7 +276,9 @@ class FFProbe
 
         $ret = $this->mapper->map($type, $data);
 
-        $this->cache->save($id, $ret);
+        $cacheItem = $this->cache->getItem($id);
+        $cacheItem->set($ret);
+        $this->cache->save($cacheItem);
 
         return $ret;
     }
diff --git a/src/FFMpeg/FFProbe/DataMapping/AbstractData.php b/src/FFMpeg/FFProbe/DataMapping/AbstractData.php
index 083e576..e830c8e 100644
--- a/src/FFMpeg/FFProbe/DataMapping/AbstractData.php
+++ b/src/FFMpeg/FFProbe/DataMapping/AbstractData.php
@@ -86,6 +86,7 @@ abstract class AbstractData implements \Countable
     /**
      * {@inheritdoc}
      */
+    #[\ReturnTypeWillChange]
     public function count()
     {
         return count($this->properties);
diff --git a/src/FFMpeg/FFProbe/DataMapping/StreamCollection.php b/src/FFMpeg/FFProbe/DataMapping/StreamCollection.php
index 409cf91..4b640e8 100644
--- a/src/FFMpeg/FFProbe/DataMapping/StreamCollection.php
+++ b/src/FFMpeg/FFProbe/DataMapping/StreamCollection.php
@@ -74,6 +74,7 @@ class StreamCollection implements \Countable, \IteratorAggregate
     /**
      * {@inheritdoc}
      */
+    #[\ReturnTypeWillChange]
     public function count()
     {
         return count($this->streams);
@@ -92,6 +93,7 @@ class StreamCollection implements \Countable, \IteratorAggregate
     /**
      * {@inheritdoc}
      */
+    #[\ReturnTypeWillChange]
     public function getIterator()
     {
         return new \ArrayIterator($this->streams);
diff --git a/src/FFMpeg/FFProbe/OptionsTester.php b/src/FFMpeg/FFProbe/OptionsTester.php
index a5cc885..1f95f3c 100644
--- a/src/FFMpeg/FFProbe/OptionsTester.php
+++ b/src/FFMpeg/FFProbe/OptionsTester.php
@@ -12,18 +12,18 @@
 namespace FFMpeg\FFProbe;
 
 use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
-use Doctrine\Common\Cache\Cache;
 use FFMpeg\Driver\FFProbeDriver;
 use FFMpeg\Exception\RuntimeException;
+use Psr\Cache\CacheItemPoolInterface;
 
 class OptionsTester implements OptionsTesterInterface
 {
     /** @var FFProbeDriver */
     private $ffprobe;
-    /** @var Cache */
+    /** @var CacheItemPoolInterface */
     private $cache;
 
-    public function __construct(FFProbeDriver $ffprobe, Cache $cache)
+    public function __construct(FFProbeDriver $ffprobe, CacheItemPoolInterface $cache)
     {
         $this->ffprobe = $ffprobe;
         $this->cache = $cache;
@@ -34,17 +34,19 @@ class OptionsTester implements OptionsTesterInterface
      */
     public function has($name)
     {
-        $id = sprintf('option-%s', $name);
+        $id = md5(sprintf('option-%s', $name));
 
-        if ($this->cache->contains($id)) {
-            return $this->cache->fetch($id);
+        if ($this->cache->hasItem($id)) {
+            return $this->cache->getItem($id)->get();
         }
 
         $output = $this->retrieveHelpOutput();
 
         $ret = (bool) preg_match('/^'.$name.'/m', $output);
 
-        $this->cache->save($id, $ret);
+        $cacheItem = $this->cache->getItem($id);
+        $cacheItem->set($ret);
+        $this->cache->save($cacheItem);
 
         return $ret;
     }
@@ -53,8 +55,8 @@ class OptionsTester implements OptionsTesterInterface
     {
         $id = 'help';
 
-        if ($this->cache->contains($id)) {
-            return $this->cache->fetch($id);
+        if ($this->cache->hasItem($id)) {
+            return $this->cache->getItem($id)->get();
         }
 
         try {
@@ -63,7 +65,9 @@ class OptionsTester implements OptionsTesterInterface
             throw new RuntimeException('Your FFProbe version is too old and does not support `-help` option, please upgrade.', $e->getCode(), $e);
         }
 
-        $this->cache->save($id, $output);
+        $cacheItem = $this->cache->getItem($id);
+        $cacheItem->set($output);
+        $this->cache->save($cacheItem);
 
         return $output;
     }
diff --git a/src/FFMpeg/Filters/FiltersCollection.php b/src/FFMpeg/Filters/FiltersCollection.php
index 1a1c20a..a0ebbf0 100644
--- a/src/FFMpeg/Filters/FiltersCollection.php
+++ b/src/FFMpeg/Filters/FiltersCollection.php
@@ -32,6 +32,7 @@ class FiltersCollection implements \Countable, \IteratorAggregate
     /**
      * {@inheritdoc}
      */
+    #[\ReturnTypeWillChange]
     public function count()
     {
         if (0 === count($this->filters)) {
@@ -44,6 +45,7 @@ class FiltersCollection implements \Countable, \IteratorAggregate
     /**
      * {@inheritdoc}
      */
+    #[\ReturnTypeWillChange]
     public function getIterator()
     {
         if (null === $this->sorted) {
diff --git a/tests/Unit/FFProbe/OptionsTesterTest.php b/tests/Unit/FFProbe/OptionsTesterTest.php
index b55386d..619f990 100644
--- a/tests/Unit/FFProbe/OptionsTesterTest.php
+++ b/tests/Unit/FFProbe/OptionsTesterTest.php
@@ -2,8 +2,9 @@
 
 namespace Tests\FFMpeg\Unit\FFProbe;
 
-use Tests\FFMpeg\Unit\TestCase;
 use FFMpeg\FFProbe\OptionsTester;
+use Symfony\Component\Cache\CacheItem;
+use Tests\FFMpeg\Unit\TestCase;
 
 class OptionsTesterTest extends TestCase
 {
@@ -36,11 +37,12 @@ class OptionsTesterTest extends TestCase
     {
         $cache = $this->getCacheMock();
 
-        $cache->expects($this->never())
-            ->method('fetch');
+        $cache->expects($this->exactly(2))
+            ->method('getItem')
+            ->will($this->returnValue(new CacheItem));
 
         $cache->expects($this->exactly(2))
-            ->method('contains')
+            ->method('hasItem')
             ->will($this->returnValue(false));
 
         $cache->expects($this->exactly(2))
@@ -73,16 +75,22 @@ class OptionsTesterTest extends TestCase
     {
         $cache = $this->getCacheMock();
 
-        $cache->expects($this->once())
-            ->method('fetch')
-            ->will($this->returnValue($data));
+        $cacheItem = new CacheItem;
+        $cacheItem->set($data);
 
         $cache->expects($this->exactly(2))
-            ->method('contains')
+            ->method('getItem')
+            ->willReturnOnConsecutiveCalls(
+                $this->returnValue($cacheItem),
+                $this->returnValue(new CacheItem)
+            );
+
+        $cache->expects($this->exactly(2))
+            ->method('hasItem')
             ->willReturnOnConsecutiveCalls(
                 $this->returnValue(false),
-                $this->returnValue(true));
-
+                $this->returnValue(true)
+            );
         $cache->expects($this->once())
             ->method('save');
 
@@ -101,14 +109,17 @@ class OptionsTesterTest extends TestCase
     {
         $cache = $this->getCacheMock();
 
-        $cache->expects($this->once())
-            ->method('fetch')
-            ->with('option-' . $optionName)
-            ->will($this->returnValue($isPresent));
+        $cacheItem = new CacheItem();
+        $cacheItem->set($isPresent);
 
         $cache->expects($this->once())
-            ->method('contains')
-            ->with('option-' . $optionName)
+            ->method('getItem')
+            ->with(md5('option-' . $optionName))
+            ->will($this->returnValue($cacheItem));
+
+        $cache->expects($this->once())
+            ->method('hasItem')
+            ->with(md5('option-' . $optionName))
             ->will($this->returnValue(true));
 
         $ffprobe = $this->getFFProbeDriverMock();
diff --git a/tests/Unit/FFProbeTest.php b/tests/Unit/FFProbeTest.php
index d927ab9..57431d5 100644
--- a/tests/Unit/FFProbeTest.php
+++ b/tests/Unit/FFProbeTest.php
@@ -2,10 +2,11 @@
 
 namespace Tests\FFMpeg\Unit;
 
-use FFMpeg\FFProbe;
-use Symfony\Component\Process\ExecutableFinder;
-use Alchemy\BinaryDriver\ConfigurationInterface;
 use Alchemy\BinaryDriver\Configuration;
+use Alchemy\BinaryDriver\ConfigurationInterface;
+use FFMpeg\FFProbe;
+use Symfony\Component\Cache\CacheItem;
+use Symfony\Component\Process\ExecutableFinder;
 
 class FFProbeTest extends TestCase
 {
@@ -100,13 +101,14 @@ class FFProbeTest extends TestCase
 
         $cache = $this->getCacheMock();
         $cache->expects($this->once())
-            ->method('contains')
+            ->method('hasItem')
             ->will($this->returnValue(false));
-        $cache->expects($this->never())
-            ->method('fetch');
+        $cache->expects($this->once())
+            ->method('getItem')
+            ->will($this->returnValue(new CacheItem));
         $cache->expects($this->once())
             ->method('save')
-            ->with($this->anything(), $output);
+            ->with($this->anything());
 
         $driver = $this->getFFProbeDriverMock();
         $driver->expects($this->once())
@@ -160,10 +162,11 @@ class FFProbeTest extends TestCase
 
         $cache = $this->getCacheMock();
         $cache->expects($this->exactly(2))
-            ->method('contains')
+            ->method('hasItem')
             ->will($this->returnValue(false));
-        $cache->expects($this->never())
-            ->method('fetch');
+        $cache->expects($this->once())
+            ->method('getItem')
+            ->will($this->returnValue(new CacheItem));
 
         $driver = $this->getFFProbeDriverMock();
         $driver->expects($this->exactly(2))
@@ -205,13 +208,16 @@ class FFProbeTest extends TestCase
 
         $tester = $this->getFFProbeOptionsTesterMock();
 
+        $cacheItem = new CacheItem;
+        $cacheItem->set($output);
+
         $cache = $this->getCacheMock();
         $cache->expects($this->once())
-            ->method('contains')
+            ->method('hasItem')
             ->will($this->returnValue(true));
         $cache->expects($this->once())
-            ->method('fetch')
-            ->will($this->returnValue($output));
+            ->method('getItem')
+            ->will($this->returnValue($cacheItem));
         $cache->expects($this->never())
             ->method('save');
 
diff --git a/tests/Unit/TestCase.php b/tests/Unit/TestCase.php
index 60bd004..2171a78 100644
--- a/tests/Unit/TestCase.php
+++ b/tests/Unit/TestCase.php
@@ -13,7 +13,7 @@ class TestCase extends BaseTestCase
 
     public function getCacheMock()
     {
-        return $this->getMockBuilder('Doctrine\Common\Cache\Cache')->getMock();
+        return $this->getMockBuilder('Psr\Cache\CacheItemPoolInterface')->getMock();
     }
 
     public function getTimeCodeMock()