2 min read

VERDI.MOV

I made my own personal YouTube.

I’ve been using Ghost Pro (the paid, hosted version of Ghost) to run this site for a little more than a year now. My only complaint is its poor video support. The easy way around that is to just use YouTube. The thing about that is that I like to own my work and that’s not exactly the case with YouTube. So yesterday I made my own YouTube. Here’s a video I made a few years ago, hosted on it:

You might look at that and think, “What’s the big deal? It’s a video. Looks a lot like YouTube.” Exactly. Except it’s not on YouTube. It’s actually on verdi.mov which also has a YouTube-like home page you can browse (except it’s all my stuff). 2006 me’s head just exploded.

Details

If you’re curious, here’s more about what it does and how it works:

  • The player itself is videojs.
  • Most of the magic happens by running a script on my computer that takes a video and makes a folder with:
    • 2160p, 1080p, 720p, and 480p versions of each video that are chopped into chunks a couple of seconds long (all done with ffmpeg). This is done for HLS streaming.
      • You know how videos can start almost instantly and then maybe sometimes they get blurry for a few moments but keep on playing? That’s HLS streaming.
    • A poster image and thumbnails that show up when you scrub over the progress bar or the poster image. This is also done with ffmpeg (though I usually go back and make my own poster image).
    • A smaller, .webp poster image for the front page made with cwebp.
    • Closed captions which are generated from the audio track by Whisper.
    • A video.json file is generated with Python.
  • I take that folder and upload it to verdi.mov which uses php to build the site and the RSS feed.

Old workflow was:

  1. Upload the video to YouTube.
  2. Wait for processing to finish.
  3. Grab the embed code and paste it into a blog post.

New workflow:

  1. Run the script on my computer and wait for processing to finish.
  2. Upload the folder to verdi.mov
  3. Grab the embed code and paste it into a blog post.