{ "cells": [ { "cell_type": "markdown", "id": "179f6bb1-ef6f-4328-b857-d85740b69b9b", "metadata": {}, "source": [ "# Compare 2 videos with SSIM, PSNR and VMAF metrics\n", "\n", "The classic metrics **PSNR** (Peak Signal to Noise Ratio) and **SSIM** (Structural SIMilarity) are implemented in C for improved performance." ] }, { "cell_type": "code", "execution_count": 1, "id": "be964f70-cf5f-4fd5-871e-188f4955e2d6", "metadata": {}, "outputs": [], "source": [ "import pathlib\n", "import subprocess\n", "import tempfile\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "from cutcutcodec.core.analysis.video.metric import compare\n", "from cutcutcodec.core.io import read\n", "from cutcutcodec.utils import get_project_root" ] }, { "cell_type": "markdown", "id": "c5c31cef-e0e1-4ced-8aa1-8e5e6c3c9b26", "metadata": {}, "source": [ "## Preparing videos to be compared\n", "Here we'll compare the original video with a noisy version." ] }, { "cell_type": "code", "execution_count": 2, "id": "c12f2222-981a-42fd-893c-5d681803c12f", "metadata": {}, "outputs": [], "source": [ "ref_file = get_project_root().parent / \"media\" / \"video\" / \"intro.webm\"\n", "dis_file = pathlib.Path(tempfile.gettempdir()) / \"distorded.mp4\"\n", "\n", "converter = subprocess.run([\"ffmpeg\", \"-y\", \"-i\", ref_file, dis_file], check=True, capture_output=True) # transcode the video" ] }, { "cell_type": "markdown", "id": "389b174f-a419-4254-a194-5719f2d82c90", "metadata": {}, "source": [ "## Simple comparison of 2 videos or images\n", "\n", "* This function takes care of color spaces.\n", "* Image comparisons are always made in yuv, not rgb.\n", "* This function is optimized and parrallelized." ] }, { "cell_type": "code", "execution_count": 3, "id": "bf1a0ad4-5206-4ed5-874d-47285220bcb2", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "compare: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 294/294 [00:30<00:00, 9.68img/s]\n" ] } ], "source": [ "metrics = compare(ref_file, dis_file, psnr=True, ssim=True)" ] }, { "cell_type": "code", "execution_count": 4, "id": "261b4bd5-bebf-4a36-8638-b8991c480ffd", "metadata": {}, "outputs": [ { "data": { "image/png": "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fHy8Fi1aJMMwlJaWpnvuuUf33nuvJMntdis1NVULFy7U1Vdf7dfvKS8vl91ul9vtVmJiYkjeCwAACK5A79+mruk577zztGLFCn355ZeSpH//+99as2aNxo4dK0kqLCyUy+VSVlaW9zV2u13Dhw9XXl5evcetrKxUeXm5zwMAALRsrcJdgIY8+OCDKi8vV58+fRQdHa3q6mo99thjmjBhgiTJ5XJJklJTU31el5qa6t1Wlzlz5mjWrFmhKzgAADAdU9f0/PWvf9Vrr72m119/XZs2bdKrr76q//mf/9Grr756WsedPn263G6397F3794glRgAAJiVqWt67rvvPj344IPevjn9+/fX119/rTlz5mjixIlyOBySpJKSEjmdTu/rSkpKdM4559R73NjYWMXGxoa07AAAwFxMXdNz5MgRRUX5FjE6Olo1NTWSpPT0dDkcDq1YscK7vby8XPn5+crMzGzWsgIAAHMzdU3PuHHj9Nhjj6lLly46++yztXnzZs2dO1c33nijJMlms2nq1KmaPXu2evbsqfT0dD300ENKS0vTlVdeGd7CAwAAUzF16Hn22Wf10EMP6fbbb9e+ffuUlpam3/72t5oxY4Z3n/vvv1+HDx/WrbfeqrKyMo0cOVK5ubmKi4sLY8kBAIDZmHqenubCPD0AAESeFjVPDwAAQLAQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCUQegAAgCW0CncBWrrqGkPrC0u172CFOrWL07D0ZEVH2cJdLAAALKdJoaeoqEhff/21jhw5oo4dO+rss89WbGxssMsW8XILijVryXYVuyu8zzntcZo5rp+yM5xhLBkAANbjd/PWnj179MADD6hr165KT0/XhRdeqLFjx2ro0KGy2+0aPXq03nrrLdXU1ISyvBEjt6BYkxZt8gk8kuRyV2jSok3KLSgOU8kAALAmv0LPnXfeqYEDB6qwsFCzZ8/W9u3b5Xa7dezYMblcLr3//vsaOXKkZsyYoQEDBmjDhg2hLrepVdcYmrVku4w6tnmem7Vku6pr6toDAACEgl/NWwkJCfrqq6+UkpJSa1unTp00atQojRo1SjNnzlRubq727t2rn/zkJ0EvbKRYX1haq4bn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6cbRo0e9x8jOzjYGDRpk5OfnG2vWrDF69uxpjB8/PlxvKeQaOmcHDx407r33XiMvL88oLCw0li9fbgwePNjo2bOnUVFR4T2G1c7ZpEmTDLvdbqxatcooLi72Po4cOeLdp7G/x+PHjxsZGRnGJZdcYmzZssXIzc01OnbsaEyfPj0cbynkGjtnu3btMh555BHj008/NQoLC413333X6N69u3HBBRd4j2G1c/bggw8aq1evNgoLC42tW7caDz74oGGz2Yx//vOfhmE07zVG6AmhZ5991ujSpYvRunVrY9iwYca6devCXSRT+PWvf204nU6jdevWxhlnnGH8+te/Nnbt2uXdfvToUeP222832rdvb7Rp08b4+c9/bhQXF4exxM3vo48+MiTVekycONEwjBPD1h966CEjNTXViI2NNS6++GJjx44dPsc4cOCAMX78eKNt27ZGYmKiccMNNxgHDx4Mw7tpHg2dsyNHjhiXXHKJ0bFjRyMmJsbo2rWrccstt9T6EmK1c1bX+ZJkvPLKK959/Pl73LNnjzF27FgjPj7e6NChg3HPPfcYVVVVzfxumkdj56yoqMi44IILjOTkZCM2NtY466yzjPvuu89wu90+x7HSObvxxhuNrl27Gq1btzY6duxoXHzxxd7AYxjNe43ZDMMwAqsbAgAAiDz06QEAAJZA6AEAAJZA6AEAAJZA6AEAAJZA6AEAAJZA6AEAAJZA6AEAAJZA6AEAAJZA6AFgCoZh6NZbb1VycrJsNpt3vSIACBZmZAZgCh988IGuuOIKrVq1yrsCeqtWrcJdLAAtCJ8oAExh9+7dcjqdOu+88+rcfuzYMbVu3bqZSwWgJaF5C0DYXX/99brjjjtUVFQkm82mbt266aKLLtKUKVM0depUdejQQWPGjJEkzZ07V/3791dCQoI6d+6s22+/XYcOHfIea+HChUpKStLSpUvVu3dvtWnTRr/4xS905MgRvfrqq+rWrZvat2+vO++8U9XV1d7XVVZW6t5779UZZ5yhhIQEDR8+XKtWrfJu//rrrzVu3Di1b99eCQkJOvvss/X+++832zkCcPqo6QEQds8884x69OihF198URs2bFB0dLR++ctf6tVXX9WkSZO0du1a775RUVGaN2+e0tPT9dVXX+n222/X/fffrxdeeMG7z5EjRzRv3jy9+eabOnjwoK666ir9/Oc/V1JSkt5//3199dVXysnJ0YgRI/TrX/9akjRlyhRt375db775ptLS0rR48WJlZ2dr27Zt6tmzpyZPnqxjx47p448/VkJCgrZv3662bds2+7kC0HT06QFgCk8//bSefvpp7dmzR5J00UUXqby8XJs2bWrwdX/729902223af/+/ZJO1PTccMMN2rVrl3r06CFJuu222/SXv/xFJSUl3qCSnZ2tbt26acGCBSoqKlL37t1VVFSktLQ077GzsrI0bNgw/eEPf9CAAQOUk5OjmTNnhuDdA2gO1PQAMK0hQ4bUem758uWaM2eOvvjiC5WXl+v48eOqqKjQkSNH1KZNG0lSmzZtvIFHklJTU9WtWzefmpnU1FTt27dPkrRt2zZVV1erV69ePr+rsrJSKSkpkqQ777xTkyZN0j//+U9lZWUpJydHAwYMCPp7BhA69OkBYFoJCQk+P+/Zs0eXX365BgwYoL///e/auHGjnn/+eUknOjp7xMTE+LzOZrPV+VxNTY0k6dChQ4qOjtbGjRu1ZcsW7+Pzzz/XM888I0m6+eab9dVXX+naa6/Vtm3bNHToUD377LNBf88AQoeaHgARY+PGjaqpqdEf//hHRUWd+M7217/+9bSPO2jQIFVXV2vfvn06//zz692vc+fOuu2223Tbbbdp+vTpeumll3THHXec9u8H0DwIPQAixllnnaWqqio9++yzGjdunNauXasFCxac9nF79eqlCRMm6LrrrtMf//hHDRo0SP/5z3+0YsUKDRgwQJdddpmmTp2qsWPHqlevXvr+++/10UcfqW/fvkF4VwCaC81bACLGwIEDNXfuXD3xxBPKyMjQa6+9pjlz5gTl2K+88oquu+463XPPPerdu7euvPJKbdiwQV26dJEkVVdXa/Lkyerbt6+ys7PVq1cvnxFjAMyP0VsAAMASqOkBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACWQOgBAACW8P8BLktT7XFF7rsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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X3fmR3EaOcfsN7/5TavzLCMjw6SNNx2zt956CwMHDjQUkUxOTsZ///tfw/POPMcYKLmRDz/8EHPmzMHixYuRn5+PxMREpKam4tKlS67eNbfRv39/lJaWGv7t27fP8Nzs2bPx+eef4+OPP8bevXtx4cIFjB8/3oV763y1tbVITEzE6tWrzT7/2muv4c0338SaNWtw8OBBhISEIDU1FfX19YY2Dz30EH744Qfs2LEDX3zxBb7++ms8/vjjzvoITmftmAFAWlqayXm3ceNGk+e96Zjt3bsXM2bMwIEDB7Bjxw40NTXh3nvvRW1traGNte+iTqfDmDFj0NjYiG+++Qbr1q3De++9h0WLFrniIzmcnGMGAFOnTjU5z1577TXDc952zLp27YpXX30VeXl5+O677zBixAikp6fjhx9+AODkc0wgtzF06FBhxowZhv/X6XRCTEyMsGzZMhfulftYvHixkJiYaPa5qqoqwc/PT/j4448Njx09elQAIOTk5DhpD90LAOGzzz4z/L9erxe0Wq3w17/+1fBYVVWVEBAQIGzcuFEQBEEoKioSAAjffvutoc1///tfQaPRCOfPn3favrtKy2MmCIIwefJkIT09XfI13n7MLl26JAAQ9u7dKwiCvO/i9u3bBR8fH6GsrMzQ5q233hJCQ0OFhoYG534AF2h5zARBEH79618LTz31lORrvP2YCYIgdOjQQfjXv/7l9HOMPUpuorGxEXl5eUhJSTE85uPjg5SUFOTk5Lhwz9zLiRMnEBMTg549e+Khhx7C2bNnAQB5eXloamoyOX59+/bFzTffzOP3i5KSEpSVlZkco7CwMCQlJRmOUU5ODsLDw3HbbbcZ2qSkpMDHxwcHDx50+j67iz179qBz587o06cPpk2bhoqKCsNz3n7MqqurAQAREREA5H0Xc3JyMGDAAERFRRnapKamoqamxtBj4MlaHjPRBx98gMjISCQkJGD+/Pmoq6szPOfNx0yn02HTpk2ora1FcnKy088xLorrJsrLy6HT6Uz+qAAQFRWFY8eOuWiv3EtSUhLee+899OnTB6WlpViyZAl+9atfobCwEGVlZfD390d4eLjJa6KiolBWVuaaHXYz4nEwd46Jz5WVlaFz584mz990002IiIjw2uOYlpaG8ePHIzY2FsXFxXj++ecxatQo5OTkwNfX16uPmV6vx6xZszB8+HAkJCQAgKzvYllZmdnzUHzOk5k7ZgDw4IMPonv37oiJicHhw4fx3HPP4fjx49i8eTMA7zxmR44cQXJyMurr69GuXTt89tlniI+PR0FBgVPPMQZKpBqjRo0y/PfAgQORlJSE7t2746OPPkJQUJAL94w82cSJEw3/PWDAAAwcOBBxcXHYs2cP7rnnHhfumevNmDEDhYWFJrmCZJnUMTPOaRswYACio6Nxzz33oLi4GHFxcc7eTbfQp08fFBQUoLq6Gp988gkmT56MvXv3On0/OPTmJiIjI+Hr69sqa//ixYvQarUu2iv3Fh4ejltuuQUnT56EVqtFY2MjqqqqTNrw+N0gHgdL55hWq201eeD69euorKzkcfxFz549ERkZiZMnTwLw3mM2c+ZMfPHFF9i9eze6du1qeFzOd1Gr1Zo9D8XnPJXUMTMnKSkJAEzOM287Zv7+/ujVqxeGDBmCZcuWITExEStXrnT6OcZAyU34+/tjyJAhyM7ONjym1+uRnZ2N5ORkF+6Z+7p69SqKi4sRHR2NIUOGwM/Pz+T4HT9+HGfPnuXx+0VsbCy0Wq3JMaqpqcHBgwcNxyg5ORlVVVXIy8sztNm1axf0er3hh9vb/fTTT6ioqEB0dDQA7ztmgiBg5syZ+Oyzz7Br1y7ExsaaPC/nu5icnIwjR46YBJg7duxAaGgo4uPjnfNBnMjaMTOnoKAAAEzOM286Zubo9Xo0NDQ4/xyzRyY62cemTZuEgIAA4b333hOKioqExx9/XAgPDzfJ2vdmTz/9tLBnzx6hpKRE2L9/v5CSkiJERkYKly5dEgRBEDIyMoSbb75Z2LVrl/Ddd98JycnJQnJysov32rmuXLkiHDp0SDh06JAAQFixYoVw6NAh4cyZM4IgCMKrr74qhIeHC1u3bhUOHz4spKenC7GxscK1a9cM20hLSxNuvfVW4eDBg8K+ffuE3r17C5MmTXLVR3I4S8fsypUrwjPPPCPk5OQIJSUlws6dO4XBgwcLvXv3Furr6w3b8KZjNm3aNCEsLEzYs2ePUFpaavhXV1dnaGPtu3j9+nUhISFBuPfee4WCggIhKytL6NSpkzB//nxXfCSHs3bMTp48Kbz00kvCd999J5SUlAhbt24VevbsKdx1112GbXjbMZs3b56wd+9eoaSkRDh8+LAwb948QaPRCF999ZUgCM49xxgouZlVq1YJN998s+Dv7y8MHTpUOHDggKt3yW088MADQnR0tODv7y906dJFeOCBB4STJ08anr927Zowffp0oUOHDkJwcLAwbtw4obS01IV77Hy7d+8WALT6N3nyZEEQmksELFy4UIiKihICAgKEe+65Rzh+/LjJNioqKoRJkyYJ7dq1E0JDQ4UpU6YIV65cccGncQ5Lx6yurk649957hU6dOgl+fn5C9+7dhalTp7a6efGmY2buWAEQ3n33XUMbOd/F06dPC6NGjRKCgoKEyMhI4emnnxaampqc/Gmcw9oxO3v2rHDXXXcJERERQkBAgNCrVy/h2WefFaqrq022403H7LHHHhO6d+8u+Pv7C506dRLuueceQ5AkCM49xzSCIAjK+qCIiIiIvANzlIiIiIgkMFAiIiIiksBAiYiIiEgCAyUiIiIiCQyUiIiIiCQwUCIiIiKSwECJiIiISAIDJSIiIiIJDJSISLUEQcDjjz+OiIgIaDQaw/pYRET2wsrcRKRa//3vf5Geno49e/agZ8+eiIyMxE033eTq3SIiD8JfFCJSreLiYkRHR+OOO+4w+3xjYyP8/f2dvFdE5Ek49EZEqvToo4/iySefxNmzZ6HRaNCjRw/85je/wcyZMzFr1ixERkYiNTUVALBixQoMGDAAISEh6NatG6ZPn46rV68atvXee+8hPDwcX3zxBfr06YPg4GDcf//9qKurw7p169CjRw906NABf/7zn6HT6Qyva2howDPPPIMuXbogJCQESUlJ2LNnj+H5M2fOYOzYsejQoQNCQkLQv39/bN++3WnHiIjajj1KRKRKK1euRFxcHP75z3/i22+/ha+vL37/+99j3bp1mDZtGvbv329o6+PjgzfffBOxsbE4deoUpk+fjrlz5+If//iHoU1dXR3efPNNbNq0CVeuXMH48eMxbtw4hIeHY/v27Th16hQmTJiA4cOH44EHHgAAzJw5E0VFRdi0aRNiYmLw2WefIS0tDUeOHEHv3r0xY8YMNDY24uuvv0ZISAiKiorQrl07px8rIrIdc5SISLXeeOMNvPHGGzh9+jQA4De/+Q1qamqQn59v8XWffPIJMjIyUF5eDqC5R2nKlCk4efIk4uLiAAAZGRl4//33cfHiRUNwk5aWhh49emDNmjU4e/YsevbsibNnzyImJsaw7ZSUFAwdOhR/+ctfMHDgQEyYMAGLFy92wKcnImdgjxIReZQhQ4a0emznzp1YtmwZjh07hpqaGly/fh319fWoq6tDcHAwACA4ONgQJAFAVFQUevToYdIDFBUVhUuXLgEAjhw5Ap1Oh1tuucXkvRoaGtCxY0cAwJ///GdMmzYNX331FVJSUjBhwgQMHDjQ7p+ZiByHOUpE5FFCQkJM/v/06dP47W9/i4EDB+LTTz9FXl4eVq9eDaA52Vvk5+dn8jqNRmP2Mb1eDwC4evUqfH19kZeXh4KCAsO/o0ePYuXKlQCAP/3pTzh16hT+8Ic/4MiRI7jtttuwatUqu39mInIc9igRkUfLy8uDXq/H3//+d/j4NN8bfvTRR23e7q233gqdTodLly7hV7/6lWS7bt26ISMjAxkZGZg/fz7Wrl2LJ598ss3vT0TOwUCJiDxar1690NTUhFWrVmHs2LHYv38/1qxZ0+bt3nLLLXjooYfwyCOP4O9//ztuvfVW/Pzzz8jOzsbAgQMxZswYzJo1C6NGjcItt9yCy5cvY/fu3ejXr58dPhUROQuH3ojIoyUmJmLFihVYvnw5EhIS8MEHH2DZsmV22fa7776LRx55BE8//TT69OmD++67D99++y1uvvlmAIBOp8OMGTPQr18/pKWl4ZZbbjGZaUdE7o+z3oiIiIgksEeJiIiISAIDJSIiIiIJDJSIiIiIJDBQIiIiIpLAQImIiIhIAgMlIiIiIgkMlIiIiIgkMFAiIiIiksBAiYiIiEgCAyUiIiIiCQyUiIiIiCT8fwK2mSY/xQK8AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(range(len(metrics[\"psnr\"])), metrics[\"psnr\"])\n", "plt.xlabel(\"frames\")\n", "plt.ylabel(\"psnr (db)\")\n", "plt.show()\n", "\n", "plt.scatter(range(len(metrics[\"ssim\"])), metrics[\"ssim\"])\n", "plt.xlabel(\"frames\")\n", "plt.ylabel(\"ssim\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "a45ac754-6dc3-42be-90a4-a76f7a554750", "metadata": {}, "source": [ "## Compare frames manually for greater control\n", "\n", "This makes it possible to specify the hyperparameters specific to each metric." ] }, { "cell_type": "code", "execution_count": 5, "id": "df09e7f6-a67b-4ef0-831c-5ef0122da0c7", "metadata": {}, "outputs": [], "source": [ "ref_frame = read(ref_file).out_select(\"video\")[0].snapshot(5.0, (1080, 1920))\n", "ref_frame_numpy = ref_frame.numpy(force=True)\n", "ref_frame.requires_grad = True\n", "dis_frame = read(dis_file).out_select(\"video\")[0].snapshot(5.0, (1080, 1920))\n", "dis_frame_numpy = dis_frame.numpy(force=True)\n", "dis_frame.requires_grad = True" ] }, { "cell_type": "markdown", "id": "b47f535b-a609-4f8e-a608-06bb6b338fb2", "metadata": {}, "source": [ "### Compare peak signal to noise ratio (PSNR)\n", "\n", "* This function has a C implementation (for cpu and no grad).\n", "* This function is torch differentiable." ] }, { "cell_type": "code", "execution_count": 6, "id": "a5b6edda-83f2-44cf-88f5-d82cd0d0ecbc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "41.762505\n", "tensor(41.7603, grad_fn=)\n" ] } ], "source": [ "from cutcutcodec.core.analysis.video.metric import psnr\n", "\n", "print(psnr(ref_frame_numpy, dis_frame_numpy))\n", "print(psnr(ref_frame, dis_frame))" ] }, { "cell_type": "markdown", "id": "ed32aa73-1044-4109-95de-5306025f5c66", "metadata": {}, "source": [ "### Compare structural similarity index measure (SSIM)\n", "\n", "* This function has a C implementation (for cpu and no grad).\n", "* This function has a fft implementation (for stride = 1).\n", "* This function is torch differentiable." ] }, { "cell_type": "code", "execution_count": 7, "id": "fed9025f-bfa7-4f31-928e-a8ebf9b64924", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9862512\n", "tensor(0.9863, grad_fn=)\n", "0.9870404\n" ] } ], "source": [ "from cutcutcodec.core.analysis.video.metric import ssim\n", "\n", "print(ssim(ref_frame_numpy, dis_frame_numpy))\n", "print(ssim(ref_frame, dis_frame))\n", "\n", "print(ssim(ref_frame_numpy, dis_frame_numpy, stride=2, sigma=1.2))" ] }, { "cell_type": "markdown", "id": "6d120622-700c-43d0-86e3-3b537b39cb93", "metadata": {}, "source": [ "### Compare Netflix VMAF\n", "\n", "This function only allows efficient interfacing with the vmaf package.\n", "So you need to [install vmaf](https://cutcutcodec.readthedocs.io/latest/developer_guide/installation.html#vamf-optional)." ] }, { "cell_type": "code", "execution_count": 8, "id": "642b36e7-3075-43be-b97d-ec0713ef8e14", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "45.14047\n" ] } ], "source": [ "from cutcutcodec.core.analysis.video.metric import vmaf\n", "\n", "print(vmaf(ref_frame_numpy, dis_frame_numpy))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 5 }