<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Everygen AI</title>
    <description>The latest articles on DEV Community by Everygen AI (@everygen_ai).</description>
    <link>https://dev.to/everygen_ai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4207885%2F6ce27255-936d-48a8-8f1a-518716084c9a.png</url>
      <title>DEV Community: Everygen AI</title>
      <link>https://dev.to/everygen_ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/everygen_ai"/>
    <language>en</language>
    <item>
      <title>How I Turn One Long Video into a Week of Shorts (Manual vs. ffmpeg vs. AI)</title>
      <dc:creator>Everygen AI</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:37:49 +0000</pubDate>
      <link>https://dev.to/everygen_ai/how-i-turn-one-long-video-into-a-week-of-shorts-manual-vs-ffmpeg-vs-ai-3a7o</link>
      <guid>https://dev.to/everygen_ai/how-i-turn-one-long-video-into-a-week-of-shorts-manual-vs-ffmpeg-vs-ai-3a7o</guid>
      <description>&lt;p&gt;I record a lot of long material: livestreams, conference-style talks, screen-share walkthroughs. They're great to have, but hardly anyone watches a 50-minute video start to finish. Most people find you through a 30-second clip in a feed and then go looking for the full version.&lt;/p&gt;

&lt;p&gt;So for a while now I've been trying to get one repeatable job right: &lt;strong&gt;one long video in, a week of vertical Shorts out.&lt;/strong&gt; Below is the workflow I've ended up with, the three approaches I've tried (manual editing, ffmpeg scripts, and AI tools), and the mistakes I made so you can skip them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal, defined like a spec
&lt;/h2&gt;

&lt;p&gt;Before touching any tool, I write the output down like a small spec:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Count:&lt;/strong&gt; 5–7 clips, one per day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format:&lt;/strong&gt; 9:16, 1080×1920, burned-in captions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Length:&lt;/strong&gt; usually 20–60 seconds. Each clip needs a hook in the first couple of seconds and one clear idea.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standalone:&lt;/strong&gt; every clip has to make sense to someone who never saw the original.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point matters most. A clip that starts with "so, as I said earlier…" is dead on arrival.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Get a transcript first
&lt;/h2&gt;

&lt;p&gt;Everything goes faster once you have text with timestamps. Speech-to-text gives you searchable content, so instead of scrubbing a timeline you read the transcript and flag moments that stand alone: a strong opinion, a short how-to, a surprising result, a mistake and how it was fixed.&lt;/p&gt;

&lt;p&gt;I mark candidates with start/end timestamps in a plain text file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00:04:12 - 00:04:58  "Why I stopped using X for Y"
00:17:30 - 00:18:05  Quick demo: the one-line fix
00:31:02 - 00:31:50  Common mistake + correction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I always end up with more candidates than I need, which is fine. Picking the best few comes later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Choose your cutting approach
&lt;/h2&gt;

&lt;p&gt;This is the part where people's workflows really split. Here's how the three options compared for me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: Manual editing in an NLE
&lt;/h3&gt;

&lt;p&gt;Load the file into Premiere, DaVinci Resolve, CapCut, or whatever you use. Cut, reframe to vertical, add captions, export.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; full creative control, precise reframing, easy to add B-roll and polish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cons:&lt;/strong&gt; slow and repetitive. Reframing and captioning each clip by hand is where the hours disappear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; your one or two flagship clips a week.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Option B: Scripts with ffmpeg
&lt;/h3&gt;

&lt;p&gt;If you're comfortable in a terminal, ffmpeg handles the mechanical work well. A basic cut plus center-crop to 9:16:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-ss&lt;/span&gt; 00:04:12 &lt;span class="nt"&gt;-to&lt;/span&gt; 00:04:58 &lt;span class="nt"&gt;-i&lt;/span&gt; talk.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-vf&lt;/span&gt; &lt;span class="s2"&gt;"crop=ih*9/16:ih,scale=1080:1920"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-crf&lt;/span&gt; 20 &lt;span class="nt"&gt;-preset&lt;/span&gt; medium &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="nt"&gt;-b&lt;/span&gt;:a 160k &lt;span class="se"&gt;\&lt;/span&gt;
  clip01.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burning in captions from an SRT file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; clip01.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-vf&lt;/span&gt; &lt;span class="s2"&gt;"subtitles=clip01.srt:force_style='FontSize=14,Alignment=2,MarginV=60'"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;:a copy clip01_captioned.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then wrap it in a loop that reads the timestamp file from Step 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nv"&gt;IFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; line&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$line&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="nv"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$line&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $3}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  ffmpeg &lt;span class="nt"&gt;-nostdin&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;-ss&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-to&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; talk.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-vf&lt;/span&gt; &lt;span class="s2"&gt;"crop=ih*9/16:ih,scale=1080:1920"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-crf&lt;/span&gt; 20 &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="s2"&gt;"clip&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; %02d &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.mp4"&lt;/span&gt;
  &lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;i+1&lt;span class="k"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt; &amp;lt; picks.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; free, reproducible, fast once it's written, and easy to version-control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cons:&lt;/strong&gt; a center crop is dumb. If the speaker walks off-center or the important bit of a screen-share is in a corner, it's gone. You still have to pick the moments yourself and make the subtitle files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; consistent footage (a fixed webcam, one speaker sitting centered) and people who like owning their tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pitfall: note the &lt;code&gt;-nostdin&lt;/code&gt; flag. Without it, ffmpeg reads from stdin inside the &lt;code&gt;while read&lt;/code&gt; loop and eats your timestamp file, so you get one clip and a mysteriously finished script. I lost an evening to that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option C: AI tools
&lt;/h3&gt;

&lt;p&gt;The newer option is to hand the long video to a tool that does the transcription, highlight detection, vertical reframing, and captions for you, then review what it gives back.&lt;/p&gt;

&lt;p&gt;I've been using the &lt;a href="https://everygen-ai.com/long-video-to-shorts" rel="noopener noreferrer"&gt;long video to shorts&lt;/a&gt; tool in Everygen for this. You upload the long recording, it suggests candidate clips with captions already applied, and you pick and adjust instead of building every clip from nothing. For existing short clips that only need subtitles, there's also a separate &lt;a href="https://everygen-ai.com/ai-tools/auto-subtitles" rel="noopener noreferrer"&gt;auto subtitles tool&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; the slowest steps (finding moments, reframing, captioning) are mostly done for you. Good for volume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cons:&lt;/strong&gt; what counts as a "highlight" is a guess. Sometimes it picks a moment that's loud but has no substance, or cuts off a sentence. You still need to review every clip.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; turning out a batch of decent clips quickly, then spending your saved time on the few that deserve manual polish.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Manual NLE&lt;/th&gt;
&lt;th&gt;ffmpeg scripts&lt;/th&gt;
&lt;th&gt;AI tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Effort per clip&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low after setup&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Picking moments&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;You&lt;/td&gt;
&lt;td&gt;Suggested, you review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart reframing&lt;/td&gt;
&lt;td&gt;Yes (by hand)&lt;/td&gt;
&lt;td&gt;No (static crop)&lt;/td&gt;
&lt;td&gt;Usually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Captions&lt;/td&gt;
&lt;td&gt;By hand or plugin&lt;/td&gt;
&lt;td&gt;Needs SRT files&lt;/td&gt;
&lt;td&gt;Built in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reproducibility&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Software license&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Usually a subscription or credits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These days I mix all three: AI for the first pass on the whole batch, ffmpeg for bulk re-encodes and format conversions, and the NLE for the one clip a week I want to look great.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Review like a stranger
&lt;/h2&gt;

&lt;p&gt;Whatever produced the clips, I watch each one with the sound off first (lots of people scroll muted), then with sound. Checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does the first second hook?&lt;/strong&gt; If not, trim the start more aggressively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it end on a complete thought?&lt;/strong&gt; Cut-off endings feel broken.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are the captions accurate?&lt;/strong&gt; Product names, code terms, and acronyms are where speech-to-text gets things wrong most often. Fix them; wrong captions look careless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is anything important cropped out?&lt;/strong&gt; Check the screen-share clips especially.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it need context?&lt;/strong&gt; Add a short text overlay at the top if needed ("Why your Docker image is huge").&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 4: Schedule the week
&lt;/h2&gt;

&lt;p&gt;Naming files helps more than you'd think: &lt;code&gt;2026-w44-mon-docker-size.mp4&lt;/code&gt;, and so on. I give each clip a one-line title and a short description that points to the full video, and spread them across the week rather than posting them all at once. Every platform has its own scheduler. Use them so the batch goes out without you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pitfalls I hit
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Picking clips by my own interest instead of the audience's.&lt;/strong&gt; The parts I'm proudest of aren't always the ones that work as standalone clips. Short, concrete, slightly opinionated moments tend to hold up best.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too long.&lt;/strong&gt; If a clip needs 90 seconds of setup, it's probably not a Short. It's a chapter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring audio.&lt;/strong&gt; Uneven levels between clips are very noticeable in a feed. Normalize them (ffmpeg's &lt;code&gt;loudnorm&lt;/code&gt; filter does this).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trusting automation blindly.&lt;/strong&gt; AI or scripts, something will eventually ship with a mid-word cut or a wrong caption. A two-minute review per clip catches almost all of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropping the source link.&lt;/strong&gt; The whole point is to send people back to the long version, so link it in every description.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The core idea is simple: transcript first, choose moments deliberately, automate the mechanical work, and keep a human review step. Whether that automation is a bash loop or an AI platform like &lt;a href="https://everygen-ai.com/" rel="noopener noreferrer"&gt;Everygen AI&lt;/a&gt; matters less than having a pipeline you'll actually run every week.&lt;/p&gt;

&lt;p&gt;If you have your own ffmpeg tricks for reframing or a review checklist I haven't thought of, I'd love to hear them in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>video</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
