<?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: bill lee</title>
    <description>The latest articles on DEV Community by bill lee (@bill_lee_6a8ae2f8b102b811).</description>
    <link>https://dev.to/bill_lee_6a8ae2f8b102b811</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%2F4186317%2F0227460d-70cb-4345-8bd2-8b4374c3cca8.png</url>
      <title>DEV Community: bill lee</title>
      <link>https://dev.to/bill_lee_6a8ae2f8b102b811</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bill_lee_6a8ae2f8b102b811"/>
    <language>en</language>
    <item>
      <title>How to Convert MOV to MP4 by Re-encoding Only the Audio</title>
      <dc:creator>bill lee</dc:creator>
      <pubDate>Tue, 10 Nov 2026 10:02:01 +0000</pubDate>
      <link>https://dev.to/bill_lee_6a8ae2f8b102b811/how-to-convert-mov-to-mp4-by-re-encoding-only-the-audio-2fj0</link>
      <guid>https://dev.to/bill_lee_6a8ae2f8b102b811/how-to-convert-mov-to-mp4-by-re-encoding-only-the-audio-2fj0</guid>
      <description>&lt;p&gt;Your upload pipeline expects an MP4 with H.264 video and AAC audio. The MOV you received already has H.264 video, but its audio is PCM. You can copy the video into the MP4 and encode just the audio. In this test, all 72 compressed video packets matched the source.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI disclosure — This article was generated with AI. The commands and results come from a local FFmpeg 8.1.2 test.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Make two MOV files with the same video
&lt;/h2&gt;

&lt;p&gt;Run the commands in a fresh directory with &lt;code&gt;ffmpeg&lt;/code&gt; and &lt;code&gt;ffprobe&lt;/code&gt; installed. The first command needs an FFmpeg build with &lt;code&gt;libx264&lt;/code&gt;. It creates a three-second test pattern with AAC audio. The second takes the same video stream and gives it a PCM audio track.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg -f lavfi -i &lt;span class="s1"&gt;'testsrc2=size=320x180:rate=24:duration=3'&lt;/span&gt; \
  -f lavfi -i &lt;span class="s1"&gt;'sine=frequency=440:sample_rate=48000:duration=3'&lt;/span&gt; \
  -c:v libx264 -pix_fmt yuv420p -c:a aac -b:a 128k demo-aac.mov

ffmpeg -i demo-aac.mov \
  -f lavfi -i &lt;span class="s1"&gt;'sine=frequency=440:sample_rate=48000:duration=3'&lt;/span&gt; \
  -map 0:v:0 -map 1:a:0 -c:v copy -c:a pcm_s16le demo-pcm.mov
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inspect the streams before choosing a command. Both inputs end in &lt;code&gt;.mov&lt;/code&gt;, but the audio codecs differ.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codecs&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  ffprobe -v error -show_entries &lt;span class="nv"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;codec_type,codec_name -of &lt;span class="nv"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="s2"&gt;"$1"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

codecs demo-aac.mov
codecs demo-pcm.mov
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Video codec&lt;/th&gt;
&lt;th&gt;Audio codec&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;demo-aac.mov&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h264&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;aac&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;demo-pcm.mov&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h264&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pcm_s16le&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Change only what your destination needs
&lt;/h2&gt;

&lt;p&gt;If both tracks already meet the destination requirements, copy both. If the video qualifies and the destination requires AAC, copy the video and encode the audio.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg -i demo-aac.mov \
  -map 0:v:0 -map 0:a:0 -c copy -movflags +faststart copied.mp4

ffmpeg -i demo-pcm.mov \
  -map 0:v:0 -map 0:a:0 -c:v copy -c:a aac -b:a 128k \
  -movflags +faststart audio-converted.mp4

codecs copied.mp4
codecs audio-converted.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both outputs report H.264 and AAC. The &lt;code&gt;-map&lt;/code&gt; options select the first video track and the first audio track. If your file has alternate audio or subtitles, decide which tracks the output needs before adapting the command. &lt;code&gt;+faststart&lt;/code&gt; moves the MP4 index to the front of the file. &lt;a href="https://ffmpeg.org/ffmpeg.html#Stream-handling" rel="noopener noreferrer"&gt;FFmpeg stream handling&lt;/a&gt; · &lt;a href="https://ffmpeg.org/ffmpeg-formats.html" rel="noopener noreferrer"&gt;MP4 muxer options&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0z6u74axzcfeil8xaare.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0z6u74axzcfeil8xaare.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Diagram based on the local PCM-to-AAC test.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify the video packets
&lt;/h2&gt;

&lt;p&gt;Seeing &lt;code&gt;h264&lt;/code&gt; on both sides tells you the codec. An H.264-to-H.264 re-encode would show the same name. To check what survived the conversion, hash the compressed payload of each video packet and compare the lists in order. &lt;a href="https://ffmpeg.org/ffprobe.html" rel="noopener noreferrer"&gt;FFprobe packet and data hash options&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;video_packets&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  ffprobe -v error -select_streams v:0 -show_packets \
    -show_entries &lt;span class="nv"&gt;packet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;data_hash -show_data_hash sha256 \
    -of &lt;span class="nv"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="s2"&gt;"$1"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

video_packets demo-pcm.mov &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; before.sha256
video_packets audio-converted.mp4 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; after.sha256
wc -l before.sha256 after.sha256
diff -u before.sha256 after.sha256
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each list had 72 hashes, and &lt;code&gt;diff&lt;/code&gt; exited successfully with no output. That checks video packet payloads in this sample. The container, timestamps and audio are outside that comparison. For a production upload, also open the output in the destination player and check playback and sync.&lt;/p&gt;

</description>
      <category>bash</category>
      <category>howto</category>
      <category>tools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Stop Installing Software for One-Off Tasks: A Developer's Web Tool List</title>
      <dc:creator>bill lee</dc:creator>
      <pubDate>Thu, 15 Oct 2026 09:14:04 +0000</pubDate>
      <link>https://dev.to/bill_lee_6a8ae2f8b102b811/stop-installing-software-for-one-off-tasks-a-developers-web-tool-list-l9b</link>
      <guid>https://dev.to/bill_lee_6a8ae2f8b102b811/stop-installing-software-for-one-off-tasks-a-developers-web-tool-list-l9b</guid>
      <description>&lt;p&gt;&lt;strong&gt;The browser-based tools I reach for when I need to compress a video, convert a file, trim audio, or shrink an image or PDF without installing anything.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhsi48qupn2prswaqb43x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhsi48qupn2prswaqb43x.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My laptop is full of tools I used once. A video converter for a single project. A PDF utility I needed for one contract. An audio editor I opened twice.&lt;/p&gt;

&lt;p&gt;These days, for one-off media tasks, I try a browser tool first. It's faster than installing something, and nothing is left behind to update or uninstall.&lt;/p&gt;

&lt;p&gt;Here's how I decide when to use a web tool, when to write a script, and which tools I use by category.&lt;/p&gt;

&lt;p&gt;Disclosure: I work on VideoBee, which appears in the video section. I've tried to be fair about where it fits and where other tools are better.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I choose a tool
&lt;/h2&gt;

&lt;p&gt;Before I use any online tool, I check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it handle my file size?&amp;nbsp;Many tools silently cap uploads. This matters most for video.&lt;/li&gt;
&lt;li&gt;What happens to my file?&amp;nbsp;For anything sensitive (client work, private recordings), I prefer local tools.&lt;/li&gt;
&lt;li&gt;How many steps?&amp;nbsp;If it takes more than a few clicks, a script is probably better.&lt;/li&gt;
&lt;li&gt;Does it need an account?&amp;nbsp;For a one-off task, I'd rather not.&lt;/li&gt;
&lt;li&gt;Is the output predictable?&amp;nbsp;Re-encoding, metadata changes, and quality loss should be controllable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to use a web tool vs. a script
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;My choice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One-off task, one or two files&lt;/td&gt;
&lt;td&gt;Web tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same task every week&lt;/td&gt;
&lt;td&gt;Script (FFmpeg, ImageMagick, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch of dozens or hundreds of files&lt;/td&gt;
&lt;td&gt;Script&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensitive or confidential files&lt;/td&gt;
&lt;td&gt;Local tool or script&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick check on a machine that isn't mine&lt;/td&gt;
&lt;td&gt;Web tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Needs to run in CI or a pipeline&lt;/td&gt;
&lt;td&gt;Script&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Video
&lt;/h2&gt;

&lt;p&gt;Video is where installing software feels the most disproportionate. Full desktop editors are huge, and FFmpeg's flags are easy to forget.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compressing a video:&amp;nbsp;when a file is too big to email, upload, or attach, I use an online compressor.&amp;nbsp;VideoBee's video compressor handles large single files (up to 10 GB), which is the main reason I use it for files that other tools reject.&lt;/li&gt;
&lt;li&gt;Converting formats:&amp;nbsp;MOV to MP4, MP4 to WebM, and similar jobs are easy to do with a&amp;nbsp;&lt;a href="https://videobee.ai/video-converter" rel="noopener noreferrer"&gt;video converter&lt;/a&gt; when you don't want to dig up the right FFmpeg command.&lt;/li&gt;
&lt;li&gt;Trimming a clip:&amp;nbsp;cutting the first and last few seconds off a screen recording is a perfect web-tool job. A&amp;nbsp;video cutter does it in the browser.&lt;/li&gt;
&lt;li&gt;For scripting or full control:&amp;nbsp;FFmpeg remains my default. If you want a local GUI,&amp;nbsp;HandBrake is a long-standing open-source option.
Audio&lt;/li&gt;
&lt;li&gt;Quick trims and format conversions:&amp;nbsp;a browser-based audio tool is enough for most one-off jobs.&lt;/li&gt;
&lt;li&gt;Real editing:&amp;nbsp;Audacity is the free desktop standard.&lt;/li&gt;
&lt;li&gt;Scripting:&amp;nbsp;FFmpeg again, for extracting or converting audio in bulk.
[Add your own picks here, ideally tools you've actually used and can describe in a sentence.]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Images
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Compressing and converting for the web:&amp;nbsp;Squoosh is a browser-based tool that lets you compare formats and quality settings side by side.&lt;/li&gt;
&lt;li&gt;Batch processing:&amp;nbsp;ImageMagick or Sharp (Node) in a script.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PDFs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Merging, splitting, compressing:&amp;nbsp;browser tools cover the common cases.&lt;/li&gt;
&lt;li&gt;Self-hosted option:&amp;nbsp;if you handle sensitive PDFs, look at open-source tools you can run yourself.
[Add the PDF tools you actually use here.]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A small FFmpeg safety net
&lt;/h2&gt;

&lt;p&gt;Even if you prefer web tools, keep these two commands handy for when you're offline or processing many files:&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="c"&gt;# Compress a video&lt;/span&gt;
ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input.mp4 &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-crf&lt;/span&gt; 26 &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 128k output.mp4

&lt;span class="c"&gt;# Convert MOV to MP4&lt;/span&gt;
ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input.mov &lt;span class="nt"&gt;-c&lt;/span&gt;:v libx264 &lt;span class="nt"&gt;-crf&lt;/span&gt; 23 &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac output.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What I don't use web tools for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Anything confidential, such as unreleased product footage or client documents&lt;/li&gt;
&lt;li&gt;Jobs I'll repeat, since a script pays off quickly&lt;/li&gt;
&lt;li&gt;Very large batches&lt;/li&gt;
&lt;li&gt;Workflows that need to be reproducible in CI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;Install software for work you do every day. For everything else, a good browser tool saves time, disk space, and mental overhead.&lt;/p&gt;

&lt;p&gt;What's in your no-install toolbox? Drop your favorites in the comments, especially for audio and PDFs, where I'm still looking for better options.&lt;/p&gt;

</description>
      <category>tools</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
