Automate Your Reach — How to Turn YouTube Videos into TikToks & Reels with Python

This is Part V of the faceless channel series. We've built the creation pipeline, automated YouTube uploads, and even let Claude drive Suno and Google Flow.

Your content is live on YouTube. But in 2026, YouTube is only half the battle. If you aren't on TikTok and Instagram Reels, you're leaving 50% of your audience on the table.

The problem? Re-editing horizontal videos into vertical shorts is tedious. It's the kind of busywork that kills momentum.

Let's automate it.

The Strategy: Create Once, Publish Everywhere

You already have high-quality 4K landscape videos from Google Flow. You have the audio stems from Suno. Instead of making new content for TikTok, we're going to programmatically repurpose what you already have.

The Goal: Take a 3-minute horizontal video and automatically generate 3-5 vertical clips (Shorts/Reels/TikToks) with zero manual editing.

Step 1: The Tool Stack

We'll use Python again, but this time with a library designed for video editing.

pip install moviepy anthropic

Step 2: The "Smart Crop" Script

Horizontal video is 16:9. Vertical video is 9:16. You can't just squish it. You need to crop the center, or pan-and-scan.

For abstract visuals (Google Flow), a center crop usually works perfectly. Here is a script that takes your landscape video, crops the center vertical slice, and cuts out a 60-second clip.

from moviepy.editor import VideoFileClip
import os

def create_short(input_file, output_file, start_time=0, duration=60):
    # Load the video
    clip = VideoFileClip(input_file)

    # Cut the clip to the desired length
    short_clip = clip.subclip(start_time, start_time + duration)

    # Calculate dimensions for 9:16 crop
    w, h = short_clip.size
    target_ratio = 9 / 16
    new_w = h * target_ratio

    # Center crop
    cropped_clip = short_clip.crop(
        x1=(w/2 - new_w/2),
        y1=0,
        width=new_w,
        height=h
    )

    # Resize to 1080x1920 (standard vertical HD)
    final_clip = cropped_clip.resize(height=1920)

    # Write the file
    final_clip.write_videofile(
        output_file,
        codec='libx264',
        audio_codec='aac',
        fps=30
    )

create_short("input/midnight-rain.mp4", "output/short-1.mp4", start_time=30)

Run this, and your cinematic landscape video becomes a perfect vertical Reel in seconds.

Step 3: Adding Overlays Programmatically

A raw video isn't enough for TikTok. You need text overlays. "Link in bio", song title, artist name. MoviePy can handle this too.

from moviepy.editor import TextClip, CompositeVideoClip

def add_overlays(video_clip, title, artist):
    # Create text clip for the title
    txt_title = TextClip(
        title,
        fontsize=70,
        color='white',
        font='Arial-Bold',
        stroke_color='black',
        stroke_width=2
    ).set_position(('center', 200)).set_duration(video_clip.duration)

    # Create text clip for "Link in Bio"
    txt_cta = TextClip(
        "Link in Bio to Listen",
        fontsize=50,
        color='yellow',
        font='Arial-Bold'
    ).set_position(('center', 1600)).set_duration(video_clip.duration)

    # Composite them onto the video
    return CompositeVideoClip([video_clip, txt_title, txt_cta])

Now every short you generate automatically has your branding burnt in. No more fiddling with TikTok's text editor.

Step 4: Automating Descriptions with Claude

The video is ready. Now you need the caption and hashtags. Claude is perfect for this. We'll use the API to generate 3 variations of viral-style captions.

import anthropic
import json

client = anthropic.Anthropic()

def generate_social_metadata(track_title, genre):
    prompt = f"""
    Write 3 TikTok/Reels captions for a {genre} music track titled '{track_title}'.
    Include 5-7 trending hashtags for this niche.
    Format as JSON.
    """

    message = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=300,
        messages=[{"role": "user", "content": prompt}]
    )

    return json.loads(message.content[0].text)

You pass the track info, Claude gives you the exact text to paste into TikTok or Instagram.

Step 5: The Batch Workflow

Just like we did for YouTube uploads, we batch this. On Sunday night, run a script that:

  1. Reads your folder of new YouTube videos
  2. Extracts 3 clips from each video (e.g., at 0:30, 1:30, and 2:30)
  3. Crops them to vertical
  4. Adds your overlays
  5. Generates a text file with captions and hashtags for each

When you wake up on Monday, you have 15 pieces of short-form content sitting in a folder, ready to post. You can manually upload them from your phone (often safer for reach than API uploads) or use a scheduler like Buffer or Metricool.

Why This Works

The "Faceless" model relies on volume. You are competing with creators who post daily. If you try to edit every Short manually, you will burn out.

By automating the repurposing step, you turn one asset (the song + landscape video) into dozens of touchpoints. Someone finds you on TikTok, clicks the link in bio, listens on Spotify. That's the funnel.

The Final Pipeline

This concludes the 5-part automation series. Let's look at what we've built:

You have effectively cloned yourself. While the scripts are cropping video and uploading files, you're free to do the only thing that actually matters: having the next great idea.

Want the scripts?

I've packaged all the Python scripts from this series (YouTube uploader, MoviePy cropper, Claude prompts) into a single repo.

Get the Code — Included with Tutorial