video-adsugcautomation

Your TikTok Shop Black Friday video isn't one file. It's eight.

··10 min read
Your TikTok Shop Black Friday video isn't one file. It's eight.

The creator clips you ordered for Black Friday arrive in the next two weeks, and each owes you more than one file. TikTok Shop's sample-selection window closes Oct 31, the promo period opens Nov 11, and by then every clip needs a vertical cut, two paid-feed cuts, a safe 16:9, three opening hooks and a captioned version. That's eight renders per clip, and that's where hand-editing becomes the bottleneck.

Quick answer: A TikTok Shop Black Friday video has to ship as more than one file: 9:16 at 1080x1920 for TikTok and Reels, 1:1 at 1080x1080 and 4:5 at 1080x1350 for paid feed placements, a padded 16:9 cut at 1920x1080, plus three opening hook variants and burned captions. You can produce every one of them locally with FFmpeg using crop, pad and drawtext, one command per output. To skip babysitting 40 clips times eight renders between the Oct 31 sample deadline and the Nov 11 promo window, send each format to FFmpeg Micro as one API call and loop the set over a Drive folder.

The calendar sets the deadline, the format list sets the volume

The dates are published, so the render deadline is arithmetic. Cruva's TikTok Shop creator calendar puts creator sample selection at Oct 18–31, with hero samples on a van around Oct 28, and the promo window at Nov 11 to Dec 1. Storika's BFCM timeline adds the rest: a creator challenge starting Nov 1, content testing through Nov 15, a pre-Black Friday scaling phase Nov 20–26, Black Friday on Nov 27, Cyber Monday on Nov 30. AfterShip's seller playbook names the planning constraint: creator content is the longest lead-time item in the campaign.

Oct 28 to Nov 11 is fourteen days, most of them shipping and shooting. The render work lands in a week-long window twice: before Nov 11, and again for the Nov 20–26 scaling push, which wants more variants from footage you already have.

Volume comes from the brief, not the calendar. Influee's Black Friday UGC guidance asks for at least three hook variants per creator and two creators per format. Twenty creators with two clips each is 40 source clips, and 40 clips at eight outputs is 320 files. Alexander Schmucker of TipsyTech Games put his pre-automation process at three to four minutes of hand-editing per video. At that rate, 320 outputs is about 18 hours of clicking, in the same week you're approving creative.

What one creator clip owes you, at what pixel dimensions

Each delivered clip becomes four reframes plus two text passes. The UGC Club's ratio guide maps each ratio to its placement.

OutputDimensionsWhere it goesFrom a 9:16 source
9:161080x1920TikTok, Reels, Storiesscale, no reframe
1:11080x1080square feed placementscenter crop
4:51080x1350IG and FB feedcenter crop
16:91920x1080YouTube, in-streampad, never crop

Three hook variants means the same 9:16 cut rendered three times with a different opening line on a colored bar, the pattern in Make 3 hooks from one encode. Burned captions go on last, per ratio.

Crop or pad, and when cropping eats the product

The rule that holds up across a batch: crop for 1:1 and 4:5, pad for 16:9. Going from 1080x1920 to 1080x1350 drops 570 px of height, and a center crop keeps the face and the product in frame if the creator framed them centrally. Going from 9:16 to 16:9 throws away 70% of the width, so you pad instead and accept the bars.

Four commands against a 1080x1920 source, with a 20-second trim starting at 12 seconds:

# 9:16 master
ffmpeg -ss 00:00:12 -t 20 -i creator-07.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
  -r 30 -pix_fmt yuv420p -c:v libx264 -crf 20 -c:a aac out-9x16.mp4

# 1:1 center crop
ffmpeg -ss 00:00:12 -t 20 -i creator-07.mp4 \
  -vf "crop=iw:iw:0:(ih-iw)/2,scale=1080:1080" \
  -r 30 -pix_fmt yuv420p -c:v libx264 -crf 20 -c:a aac out-1x1.mp4

# 4:5 center crop
ffmpeg -ss 00:00:12 -t 20 -i creator-07.mp4 \
  -vf "crop=iw:iw*5/4:0:(ih-iw*5/4)/2,scale=1080:1350" \
  -r 30 -pix_fmt yuv420p -c:v libx264 -crf 20 -c:a aac out-4x5.mp4

# 16:9 padded, nothing cropped
ffmpeg -ss 00:00:12 -t 20 -i creator-07.mp4 \
  -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" \
  -r 30 -pix_fmt yuv420p -c:v libx264 -crf 20 -c:a aac out-16x9.mp4

The hook bar is one more filter on the 9:16 output, run once per hook line:

ffmpeg -i out-9x16.mp4 -vf \
  "drawbox=y=0:w=iw:h=300:color=0xE23B2E@1:t=fill,\
drawtext=fontfile=/path/Inter-Bold.ttf:text='I tested 3 Black Friday deals':\
fontcolor=white:fontsize=64:x=(w-text_w)/2:y=100" \
  -c:a copy hook-a.mp4

Multiply that by 40 clips and you're managing an FFmpeg install, a machine to run it on, and 320 correctly named output files. Every one of those commands has a one-call equivalent on FFmpeg Micro: you POST the job, it renders on managed infrastructure, your workflow downloads the result. More than 300 builders run it from Make or n8n instead of a terminal.

The API shape, one call per output

Four steps per output, all in the docs. Upload once, then one transcode per format:

# 1. get a presigned upload URL
curl -X POST https://api.ffmpeg-micro.com/v1/upload/presigned-url \
  -H "Authorization: Bearer $FFMPEG_MICRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename":"creator-07.mp4"}'

# 2. PUT the file straight to storage, then
# 3. POST /v1/upload/confirm
# 4. one transcode job per output format
curl -X POST https://api.ffmpeg-micro.com/v1/transcodes \
  -H "Authorization: Bearer $FFMPEG_MICRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "options": {
          "@text-overlay": {
            "text": "I tested 3 Black Friday deals",
            "charsPerLine": 22,
            "fontSize": 64,
            "lineSpacing": 8
          }
        }
      }'

Then you poll the job or take a webhook, and download. Checking status, listing jobs and downloading are free, so a tight poll loop costs nothing. Field names for trim and output size live in the docs; the per-format options are all that changes between the four calls.

The n8n and Make shape: fan out, collect, write back

One loop handles the whole season, with five nodes' worth of logic. The trigger is whatever your creators deliver into: a Google Drive folder watch, or a Google Sheet where each row is a clip URL, in and out timecodes, and three hook lines.

  1. Trigger on a new file in the Drive folder, or run a Schedule Trigger every 15 minutes against the sheet.
  2. Build the job list in a Code or Set node. One row becomes eight items: four formats, three hooks, one caption pass.
  3. Split In Batches into an HTTP Request node that POSTs to /v1/transcodes. Keep the batch size inside your plan's concurrency limit.
  4. Poll the job IDs, or let a webhook collect them, then download each finished output.
  5. Write back: upload each file to a per-format Drive subfolder and put the output URL in the sheet row.

Same five steps in Make, with an Iterator where n8n has Split In Batches. The watch-a-folder-and-render pattern is in Make.com + video: watermark every UGC upload automatically, and the four-cut mechanics for one product video are in One product video, four cuts. For a single hero clip you want done without building anything, the Listing Video Kit blueprint is the one-click version of the four-format step.

What a full seasonal set actually costs per clip

The cost comes off the trim length, not the source length. FFmpeg Micro bills one token per 10 seconds of input video, metered per second, with no rounding up to the minute. Trim a 20-second hook out of a three-minute creator video and you're billed for 20 seconds.

Eight renders of a 20-second cut is 160 seconds of billed input, so 16 tokens per creator clip. Forty clips is 640 tokens, comfortably inside Starter's 2,500 monthly tokens at $19.99. If billing worked on source duration, those same eight jobs would meter three minutes each: 144 tokens per clip, 5,760 for the batch, nine times the bill for identical output.

Failed jobs are never billed, so a malformed row in your sheet costs a retry and nothing else. A new account gets 200 tokens with no card, about 33 minutes of video, roughly a dozen full format sets.

Pitfalls that show up around render 30

Most failures in a seasonal batch are ordering problems, not FFmpeg problems. Five that cost real time:

  • Captions burned before the reframe get cropped away by the 1:1 and 4:5 crops. Trim first, reframe second, burn text last, per ratio.
  • Phone footage is often variable frame rate, which drifts audio on long concatenations. Force CFR with -r 30 on every output.
  • Odd output dimensions make libx264 fail outright. Keep every target even and set -pix_fmt yuv420p so the files play everywhere.
  • Captions parked at the bottom of a 9:16 frame land under TikTok's own UI. The UGC Club's safe-area guidance keeps face, product, captions and CTA clear of the top, bottom and right-side controls, roughly a 340 px bottom margin on a 1920-tall frame.
  • The free tier caps input at 100 MB per file, and raw phone uploads clear that easily. Starter raises it to 1,024 MB, or trim before upload.

When a render loop is the wrong tool

A loop produces the same decision 320 times, which is wrong when the decision should differ per clip. If a creator shot handheld with the product drifting across frame, a fixed center crop will cut it in half, and no batch config fixes that. Someone has to reframe it by hand or ask for a re-shoot. Per-platform re-edits, motion-tracked captions and timeline-level changes belong in an editor or a template-editor service, not a format fan-out.

The loop is right for the other 90%: clips where the creator framed centrally, the edit is approved, and what's left is mechanical multiplication against a date that isn't moving.

FAQ

Do I pay for the full creator upload or only the clip I trimmed?

FFmpeg Micro bills the duration of video processed, so a 20-second trim out of a three-minute creator video is billed as 20 seconds. Billing is per second with no rounding to the nearest minute, and failed jobs are never billed.

Should I crop or pad when going from 9:16 to other ratios?

Crop for 1:1 and 4:5, pad for 16:9. A center crop from 1080x1920 to 1080x1350 keeps a centrally framed subject intact, while cropping it to 16:9 would discard most of the frame, so pad to 1920x1080 for YouTube and in-stream.

How many days do I have to render everything?

TikTok Shop's published calendar ships hero samples around Oct 28 and opens the promo window Nov 11, about fourteen days, most of it shipping and shooting. The practical render window is a few days in the first week of November, then again before the Nov 20–26 scaling phase.

Can I get three hook variants without re-exporting the whole video?

Three hook variants are three separate renders of the same trimmed cut, each with a different line drawn on a colored bar. You don't re-export the long source, you re-render the 20-second cut, which is why variant count affects your bill linearly.

What happens if one job fails in the middle of a 320-render batch?

A failed job returns an error and isn't billed, so the batch costs the same whether or not you retry. Keep the job ID and the row reference together in your sheet so a retry re-runs one output instead of the whole clip.

Clips arriving next week are a volume problem on a fixed date, which is the premise of UGC video content pipelines. Sign up free and the 200 starting tokens will get a dozen full format sets rendered before the Oct 31 window closes.

About Javid Jamae

Founder & CEO at FFmpeg Micro

Javid is a software engineer, author, and entrepreneur with over 25 years of professional software development experience across enterprise, startup, and consulting environments. He founded FFmpeg Micro to make video processing accessible to developers through a simple, automation-first REST API.

Software EngineeringVideo ProcessingFFmpegCloud ArchitectureAPI DesignAutomation

Ready to process videos at scale?

Start using FFmpeg Micro's simple API today. No infrastructure required.

Get Started Free