Home / Guides / MP3 to video

How to turn an MP3 into a video for YouTube

YouTube will not accept an audio file. Here is the free way to wrap it in a video โ€” a still image or a moving waveform โ€” and the export settings that stop your audio being re-encoded into mush.

Updated 18 August 2026 ยท 6 min read

Every route below produces the same thing: an MP4 with your audio intact and something to look at. The difference is how much work it is for one track versus two hundred.

The fastest free method: ffmpeg and a still image

ffmpeg is free, runs on Mac, Windows and Linux, and does this in one command. Install it, put your image and audio in the same folder, and run:

ffmpeg -loop 1 -i cover.jpg -i track.mp3 \
  -c:v libx264 -tune stillimage -pix_fmt yuv420p \
  -c:a aac -b:a 320k \
  -shortest -movflags +faststart output.mp4

What each part is doing:

FlagWhy it matters
-loop 1Repeats the still image so it lasts as long as the audio
-tune stillimageTells the encoder the picture never changes โ€” much smaller file
-pix_fmt yuv420pWithout this, some players and phones show a black screen
-b:a 320kUpload better audio than you need; YouTube re-encodes, so give it headroom
-shortestEnds the video when the audio ends instead of looping forever
-movflags +faststartMoves the index to the front so it starts playing before it's fully loaded

The most common failure: "width not divisible by 2". H.264 needs even pixel dimensions. Resize your image to 1920ร—1080 (or 1080ร—1920 for Shorts) and it goes away. Or add -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" to force it.

Adding a waveform instead of a still

A moving visual holds attention far better than a static frame, and ffmpeg can generate one from the audio itself โ€” no editing software:

ffmpeg -i track.mp3 -filter_complex \
  "[0:a]showcqt=s=1920x1080:fps=30[v]" \
  -map "[v]" -map 0:a \
  -c:v libx264 -pix_fmt yuv420p -c:a aac -b:a 320k \
  -movflags +faststart output.mp4

showcqt renders a musical-note spectrum, which tracks melody rather than just volume โ€” it reads as intentional rather than as a generic bouncing bar meter. showwaves and showfreqs are the alternatives if you prefer a classic waveform.

To put the waveform over your artwork rather than on black, overlay it:

ffmpeg -loop 1 -i cover.jpg -i track.mp3 -filter_complex \
  "[1:a]showcqt=s=1920x300:fps=30[w]; \
   [0:v]scale=1920:1080[bg]; \
   [bg][w]overlay=0:H-h[v]" \
  -map "[v]" -map 1:a -c:v libx264 -pix_fmt yuv420p \
  -c:a aac -b:a 320k -shortest -movflags +faststart output.mp4

The no-command-line options

ToolGood forCatch
CapCutOne track, quickly, with captionsManual per track; watermark on some exports
Online convertersA single file, no installUpload limits, re-encoded audio, your file on someone's server
DaVinci ResolveFull control, freeHeavy install for what is a one-line job
CanvaNice-looking templatesLength caps and slow exports on long audio

What about a whole library?

The commands above are fine for one track. For an album, a back catalogue, or a library you post from daily, the work is not the encoding โ€” it is doing it consistently two hundred times: the same logo placement, the same title card, both a 16:9 and a 9:16 version, correct filenames, nothing silently truncated.

That is a batch job, and it is worth scripting once rather than repeating by hand.

Do it to the whole library at once

Social Video Factory turns a folder of audio into finished branded videos in bulk โ€” vertical and horizontal, with your logo, QR code and titles burned in, consistently across every track. A downloadable Claude skill, one purchase.

See how it works

Related guides