How to convert MP3 to MP4 with an image

Turn an MP3 into an MP4 with one picture: a Timeline 1.0 render holds the image for the whole track, up to 30 minutes, at the frame size you set.

4 min readSume
All posts

To convert an MP3 to an MP4 with an image, make a video that shows one picture for the whole length of the audio and plays the MP3 as its sound. With Sume, when the MP3 and the picture are already hosted on Sume, that is one Timeline 1.0 render: the MP3 as the audio spine, the picture as the only video[] slot, and audio.duration_seconds set to the track's length, up to 1,800 seconds.

The facts come from the Timeline 1.0 docs and the field descriptions in the Sume API reference, read on 2026-09-27. Anything described as current behavior is read from Sume's code.

Where do the MP3 and the image need to be?

Both must already be your workspace's media.sume.com artifacts or assets; the render rejects off-host URLs at admit. That suits files made by earlier Sume jobs, because Sume mirrors generated outputs into its own media URLs. Text-to-speech is one source of an MP3: TTS 1.0 returns mp3 at 44,100 Hz and 128 kbps by default, and the API reference names a TTS master as a spine-grade file.

Sume has no public upload route for a file on your computer: its asset upload routes are hidden from the public API reference. Which URLs each endpoint accepts covers the rules.

How do I make the MP4?

Send one render. The picture's slot starts at 0 and lasts as long as the audio, and a still is held as a static frame for the whole slot. output 1920×1080 makes a landscape video; leave output out and you get the default 1080×1920 portrait frame.

  • audio.duration_seconds is the output length, and the API reference says the output always equals it, so set it to the track's length. A shorter value cuts off the end of the track.
  • For a square cover in a 16:9 frame, set the slot's fit. In the current code the default, cover, fills the frame and crops what overflows, so the cover loses its top and bottom; contain keeps the whole picture with black bars, and the API reference says blur pads with a blurred copy of the frame instead. The image slideshow video API post covers every fit mode.
  • Idempotency-Key is required. The default mode is async: poll GET /v1/jobs/:id/status, then read GET /v1/jobs/:id/result, whose video_url is the MP4.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: episode-12-mp4" \
  -d '{
    "audio": { "url": "https://media.sume.com/artifacts/artf_demo/episode.mp3", "duration_seconds": 214 },
    "output": { "width": 1920, "height": 1080 },
    "video": [
      { "source_url": "https://media.sume.com/artifacts/artf_demo/cover.png", "start": 0, "duration": 214, "fit": "contain" }
    ]
  }'

What length, size, and sound will the MP4 have?

The MP3 sets the length and the sound, and output sets the picture. The API reference says a spine under 32 kHz is reported as audio_spine_low_fidelity, so an MP3 at a lower sample rate comes back with that warning.

From Timeline 1.0 and the Sume API reference, read 2026-09-27; the audio codec is read from Sume's code.
PropertyWhat you get
Lengthaudio.duration_seconds, from 1 to 1,800 seconds
Frame sizeoutput.width × output.height, even integers from 256 to 2160; default 1080×1920
Frame rate30 fps when the render has only stills; output.fps can pick 24, 25, 30, or 60 instead
SoundThe spine's sample rate and channel count, encoded as AAC at 192 kbps in the current code
Containermp4 only

Can the picture move?

Not in this render: stills are static holds, and a motion field is accepted and ignored with a motion_ignored warning. For movement, turn the picture into a short clip first, as in make a picture move with AI, then loop it to the audio's length.

What does it cost, and what are the limits?

The render reserves $0.10 per output minute on API pricing, plus a 5.5% agent fee by default, counted as ceil(audio.duration_seconds / 60) minutes, so the 214-second episode above reserves 4 minutes. It never charges more than its reservation.

  • One render covers at most 1,800 seconds, 30 minutes. A longer recording takes more than one render, and audio.source_in sets where each one starts in the file.
  • Each edge is at most 2,160 pixels, so a 3840×2160 frame is out of range.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume