{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1e7f1824",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:11.212280Z",
     "start_time": "2023-12-11T17:46:10.878432Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "from suno_utils.worker.video_seewav import (\n",
    "    visualize,\n",
    "    render_demucs_audio,\n",
    "    envelope,\n",
    "    read_audio,\n",
    ")\n",
    "from suno_utils.audio import Audio\n",
    "from pathlib import Path\n",
    "import tempfile\n",
    "\n",
    "from IPython.display import Video"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "009a49a0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:11.224348Z",
     "start_time": "2023-12-11T17:46:11.213326Z"
    }
   },
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6280c602",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:11.513898Z",
     "start_time": "2023-12-11T17:46:11.226193Z"
    }
   },
   "outputs": [],
   "source": [
    "test_audio = Audio.from_file(\"audios/good_comb.mp3\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7d80ae8b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:11.526285Z",
     "start_time": "2023-12-11T17:46:11.516611Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video src=\"videos/out.mp4\" controls  >\n",
       "      Your browser does not support the <code>video</code> element.\n",
       "    </video>"
      ],
      "text/plain": [
       "<IPython.core.display.Video object>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Video(\"videos/out.mp4\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6b9614df",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:11.573921Z",
     "start_time": "2023-12-11T17:46:11.527261Z"
    }
   },
   "outputs": [],
   "source": [
    "test_text = \"\"\"\n",
    "[Verse]\n",
    "Gather 'round the table, it's that time of year\n",
    "Families coming together, spreading love and cheer\n",
    "Turkeys in the oven, sweet potatoes on the stove\n",
    "Gratitude in our hearts, let it overflow (oh, yeah)\n",
    "We count our blessings, give thanks for all we've got\n",
    "\n",
    "[Chorus]\n",
    "It's a Thanksgiving story, a tale of gratitude and grace\n",
    "Where love and laughter fill the space\n",
    "We're thankful for the memories we're makin'\n",
    "With our loved ones, hearts awaken\n",
    "Thanksgiving, a time to share and appreciate\n",
    "In this country song, we celebrate\"\"\"\n",
    "\n",
    "# test_text = \"\"\"\n",
    "# oh vamos a tocar la guitarra, bajo la luz de la luna, apaguemos el teléfono y disfrutemos la fortuna\n",
    "\n",
    "# \"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1796f344",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:11.751890Z",
     "start_time": "2023-12-11T17:46:11.574930Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rm: cannot remove 'videos/out5.mp4': No such file or directory\r\n"
     ]
    }
   ],
   "source": [
    "!rm \"videos/out5.mp4\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "889f563a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.201525Z",
     "start_time": "2023-12-11T17:46:11.753153Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Audio duration is  99.216\n",
      "Before to mp3 0.00 seconds.\n",
      "Before final conversion of full video in 0.85 seconds.\n",
      "Start visualization...\n",
      "Before calculating fonts... 0.38 seconds.\n",
      "Using font size 26\n",
      "Before generating the frames... 0.74 seconds.\n",
      "Generated 198 frames in 5.23 seconds.\n",
      "Encoding the animation video... \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers\n",
      "  built with gcc 7.3.0 (crosstool-NG 1.23.0.449-a04d0)\n",
      "  configuration: --prefix=/opt/conda/conda-bld/ffmpeg_1597178665428/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeh --cc=/opt/conda/conda-bld/ffmpeg_1597178665428/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc --disable-doc --disable-openssl --enable-avresample --enable-gnutls --enable-hardcoded-tables --enable-libfreetype --enable-libopenh264 --enable-pic --enable-pthreads --enable-shared --disable-static --enable-version3 --enable-zlib --enable-libmp3lame\n",
      "  libavutil      56. 51.100 / 56. 51.100\n",
      "  libavcodec     58. 91.100 / 58. 91.100\n",
      "  libavformat    58. 45.100 / 58. 45.100\n",
      "  libavdevice    58. 10.100 / 58. 10.100\n",
      "  libavfilter     7. 85.100 /  7. 85.100\n",
      "  libavresample   4.  0.  0 /  4.  0.  0\n",
      "  libswscale      5.  7.100 /  5.  7.100\n",
      "  libswresample   3.  7.100 /  3.  7.100\n",
      "Input #0, image2, from '%06d.png':\n",
      "  Duration: 00:01:39.00, start: 0.000000, bitrate: N/A\n",
      "    Stream #0:0: Video: png, rgb24(pc), 600x900, 2 fps, 2 tbr, 2 tbn, 2 tbc\n",
      "[mp3 @ 0x562a4266d680] Estimating duration from bitrate, this may be inaccurate\n",
      "Input #1, mp3, from '/tmp/tmpifv5zzj_/orig.mp3':\n",
      "  Duration: 00:01:39.24, start: 0.000000, bitrate: 64 kb/s\n",
      "    Stream #1:0: Audio: mp3, 48000 Hz, mono, fltp, 64 kb/s\n",
      "Unknown encoder 'libx264'\n"
     ]
    },
    {
     "ename": "CalledProcessError",
     "evalue": "Command '['ffmpeg', '-y', '-r', '2', '-f', 'image2', '-s', '600x900', '-i', '%06d.png', '-i', PosixPath('/tmp/tmpifv5zzj_/orig.mp3'), '-c:a', 'aac', '-vcodec', 'libx264', '-pix_fmt', 'yuv420p', '-shortest', PosixPath('/tmp/tmpifv5zzj_/out2.mp4')]' returned non-zero exit status 1.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mCalledProcessError\u001b[0m                        Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mrender_demucs_audio\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m      2\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtest_audio\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m      3\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtest_text\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m      4\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mvideos/out5.mp4\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m      5\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mkpop\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m      6\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpng_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mvideos/test_high_res.png\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m      7\u001b[0m \u001b[43m    \u001b[49m\u001b[43mis_square\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m      8\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstereo\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m      9\u001b[0m \u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/Work/glockenspiel/suno_utils/suno_utils/worker/video_seewav.py:687\u001b[0m, in \u001b[0;36mrender_demucs_audio\u001b[0;34m(audio, text, out, png_path, is_square, image_transparency, timestamps, size, tags, stereo)\u001b[0m\n\u001b[1;32m    685\u001b[0m audio\u001b[38;5;241m.\u001b[39mto_wav(\u001b[38;5;28mstr\u001b[39m(orig_wav_path))\n\u001b[1;32m    686\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBefore final conversion of full video in \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;241m.\u001b[39mtime()\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mstart_time\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.2f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m seconds.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 687\u001b[0m \u001b[43mvisualize\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    688\u001b[0m \u001b[43m    \u001b[49m\u001b[43morig_mp3_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    689\u001b[0m \u001b[43m    \u001b[49m\u001b[43mPath\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtemp_dir\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    690\u001b[0m \u001b[43m    \u001b[49m\u001b[43mPath\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtemp_dir\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mout2.mp4\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    691\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpng_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpng_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    692\u001b[0m \u001b[43m    \u001b[49m\u001b[43mis_square\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mis_square\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    693\u001b[0m \u001b[43m    \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    694\u001b[0m \u001b[43m    \u001b[49m\u001b[43mbg_color\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m33\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    695\u001b[0m \u001b[43m    \u001b[49m\u001b[43mrate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    696\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstereo\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstereo\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    697\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtext\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    698\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtags\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    699\u001b[0m \u001b[43m    \u001b[49m\u001b[43mimage_transparency\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mimage_transparency\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    700\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtimestamps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimestamps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    701\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    702\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBefore final conversion of full video in \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;241m.\u001b[39mtime()\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mstart_time\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.2f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m seconds.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    703\u001b[0m out_path \u001b[38;5;241m=\u001b[39m Path(temp_dir) \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mout.mp4\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
      "File \u001b[0;32m~/Work/glockenspiel/suno_utils/suno_utils/worker/video_seewav.py:633\u001b[0m, in \u001b[0;36mvisualize\u001b[0;34m(audio, tmp, out, png_path, is_square, seek, duration, rate, bars, speed, audio_time, oversample, fg_color, fg_color2, bg_color, size, stereo, text, image_transparency, timestamps, tags)\u001b[0m\n\u001b[1;32m    630\u001b[0m start_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[1;32m    632\u001b[0m \u001b[38;5;66;03m# https://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/\u001b[39;00m\n\u001b[0;32m--> 633\u001b[0m \u001b[43msp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    634\u001b[0m \u001b[43m    \u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m    635\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mffmpeg\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    636\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-y\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    637\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-r\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    638\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mrate\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    639\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-f\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    640\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mimage2\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    641\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-s\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    642\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43msize\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43msize\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    643\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-i\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    644\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;132;43;01m%06d\u001b[39;49;00m\u001b[38;5;124;43m.png\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    645\u001b[0m \u001b[43m    \u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m    646\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43maudio_cmd\u001b[49m\n\u001b[1;32m    647\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\n\u001b[1;32m    648\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-c:a\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    649\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43maac\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    650\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-vcodec\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    651\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlibx264\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    652\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-pix_fmt\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    653\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43myuv420p\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    654\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-shortest\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    655\u001b[0m \u001b[43m        \u001b[49m\u001b[43mout\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    656\u001b[0m \u001b[43m    \u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    657\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcheck\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    658\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcwd\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    659\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    660\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mEncoded the video in \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;241m.\u001b[39mtime()\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mstart_time\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.2f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m seconds.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "File \u001b[0;32m~/anaconda3/envs/suno_env/lib/python3.10/subprocess.py:526\u001b[0m, in \u001b[0;36mrun\u001b[0;34m(input, capture_output, timeout, check, *popenargs, **kwargs)\u001b[0m\n\u001b[1;32m    524\u001b[0m     retcode \u001b[38;5;241m=\u001b[39m process\u001b[38;5;241m.\u001b[39mpoll()\n\u001b[1;32m    525\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m check \u001b[38;5;129;01mand\u001b[39;00m retcode:\n\u001b[0;32m--> 526\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m CalledProcessError(retcode, process\u001b[38;5;241m.\u001b[39margs,\n\u001b[1;32m    527\u001b[0m                                  output\u001b[38;5;241m=\u001b[39mstdout, stderr\u001b[38;5;241m=\u001b[39mstderr)\n\u001b[1;32m    528\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m CompletedProcess(process\u001b[38;5;241m.\u001b[39margs, retcode, stdout, stderr)\n",
      "\u001b[0;31mCalledProcessError\u001b[0m: Command '['ffmpeg', '-y', '-r', '2', '-f', 'image2', '-s', '600x900', '-i', '%06d.png', '-i', PosixPath('/tmp/tmpifv5zzj_/orig.mp3'), '-c:a', 'aac', '-vcodec', 'libx264', '-pix_fmt', 'yuv420p', '-shortest', PosixPath('/tmp/tmpifv5zzj_/out2.mp4')]' returned non-zero exit status 1."
     ]
    }
   ],
   "source": [
    "render_demucs_audio(\n",
    "    test_audio,\n",
    "    test_text,\n",
    "    \"videos/out5.mp4\",\n",
    "    tags=\"kpop\",\n",
    "    png_path=\"videos/test_high_res.png\",\n",
    "    is_square=True,\n",
    "    stereo=False,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a46feaf5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.202792Z",
     "start_time": "2023-12-11T17:46:18.202784Z"
    }
   },
   "outputs": [],
   "source": [
    "# out2 is the original video\n",
    "# Video(\"videos/out2.mp4\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f044b0d0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.203740Z",
     "start_time": "2023-12-11T17:46:18.203731Z"
    }
   },
   "outputs": [],
   "source": [
    "# !rm \"videos/out3.mp4\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "54a210f2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.204326Z",
     "start_time": "2023-12-11T17:46:18.204319Z"
    }
   },
   "outputs": [],
   "source": [
    "# this is the new video\n",
    "Video(\"videos/out5.mp4\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2749a299",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.205110Z",
     "start_time": "2023-12-11T17:46:18.205102Z"
    }
   },
   "outputs": [],
   "source": [
    "# this is the new video\n",
    "Video(\"videos/out5.mp4\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9fb250a1",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.205796Z",
     "start_time": "2023-12-11T17:46:18.205787Z"
    }
   },
   "outputs": [],
   "source": [
    "test_a = test_audio.array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b9584d01",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.206494Z",
     "start_time": "2023-12-11T17:46:18.206486Z"
    }
   },
   "outputs": [],
   "source": [
    "test_a.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "303927bf",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.207069Z",
     "start_time": "2023-12-11T17:46:18.207061Z"
    }
   },
   "outputs": [],
   "source": [
    "audio_time = 0.4\n",
    "bars = 50\n",
    "sr = 48000\n",
    "oversample = 3\n",
    "window = int(sr * audio_time / bars)\n",
    "stride = int(window / oversample)\n",
    "test_env = envelope(test_a / test_a.std(), window, stride)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "002abfc8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-11T17:46:18.207864Z",
     "start_time": "2023-12-11T17:46:18.207856Z"
    }
   },
   "outputs": [],
   "source": [
    "test_env"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "00829d0e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.10.12"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
