Podcast Audiogram Generator - Waveform Video MP4 avatar

Podcast Audiogram Generator - Waveform Video MP4

Pricing

from $30.00 / 1,000 video clips

Go to Apify Store
Podcast Audiogram Generator - Waveform Video MP4

Podcast Audiogram Generator - Waveform Video MP4

Turn a podcast episode or any audio link into social video clips: animated waveform, cover art, title, progress bar and captions from your SRT. Square, vertical and horizontal MP4 from an MP3 link or the RSS feed. Flat price per clip.

Pricing

from $30.00 / 1,000 video clips

Rating

0.0

(0)

Developer

Maksym Kotenko

Maksym Kotenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Security

Limited permissions

Share

Turn a podcast episode, a voice note or any audio file into audiogram videos for social media: an animated waveform that moves with the voice, your cover art, the episode title, a progress bar and burned-in captions from your own subtitles. You get a ready-to-post MP4 in square, vertical or horizontal format, plus a JPG thumbnail, for every clip.

Give it a direct audio link (MP3, M4A, WAV and more) or just the podcast RSS feed - the Actor finds the latest episode, downloads the audio, and takes the title, show name and artwork from the feed. Cut one clip or twenty clips from the same episode in one run. There is no editor to click through, no watermark and no monthly subscription: you pay a flat price per finished video.

  • Input: audio URL or podcast RSS feed, start time and length of each clip, formats, colors, optional SRT or WebVTT captions.
  • Output: MP4 videos (H.264 + AAC, fast start) and JPG thumbnails in the run's key-value store, one dataset row per video with direct download links.
  • Works with: the Apify API, n8n, Make, Zapier, webhooks, scheduled runs and AI agents.

What is an audiogram?

An audiogram is a short video made from audio: a static picture (usually the podcast cover and the episode title) with an animated sound wave, often with captions. Social networks do not let you post plain audio, and posts with video get far more reach than links. Podcasters use audiograms to promote every new episode on Instagram, TikTok, YouTube Shorts, LinkedIn, X and Facebook - typically 30 to 60 seconds of the best moment, with a link to the full episode.

Tools like Headliner, Wavve, Descript or Canva make audiograms by hand, one at a time, in a web editor. This Actor makes them by API, so a new episode can turn into ready clips automatically.

What this Actor does

  • Animated waveform in three styles: blocky equalizer bars, a filled wave, or a thin oscilloscope line. The animation is computed from the real audio, frame by frame.
  • Cover art as a rounded square with a soft shadow, from your image link or straight from the RSS feed.
  • Title and subtitle that wrap and shrink to fit, with emoji removed so nothing renders as an empty box.
  • Progress bar that fills as the clip plays, in your accent color.
  • Burned-in captions from your SRT or WebVTT file. Use the transcript your podcast host already generates; the Actor shows only the lines that fall inside each clip and re-times them.
  • Three formats per clip: square 1080x1080, vertical 1080x1920, horizontal 1920x1080.
  • Solid or blurred background: a color of your choice, or the cover art blurred across the whole frame.
  • Audio fade in and out so the clip does not cut in mid-word.
  • Many clips per run: up to 20 clips from one episode, each in every format you choose.
  • RSS episode picking: the latest episode, the one before it, or the episode whose title contains a word.
  • Thumbnail JPG for every video, for the post preview or a CMS.
  • Free demo: leave the audio empty and you get a demo clip from built-in sample audio, free of charge, to see the look before you spend anything.

The Actor does not use AI models and does not send your audio to any third party. Rendering is done with FFmpeg inside the run.

Who it is for

  • Podcasters who want a clip for every episode without opening an editor.
  • Agencies and producers who publish many shows and need consistent, branded clips at volume.
  • Automation builders using n8n, Make or Zapier: new episode in the RSS feed, clip rendered, video posted or sent for review.
  • Developers and AI agents that need an audio-to-video step through a simple API call.
  • Radio, newsletters, courses and webinars: any spoken audio becomes a shareable video.

How to use it

  1. Paste a direct link to your audio file into Audio file URL. It must be the file itself (ending in .mp3, .m4a, .wav or similar), not a web page with a player.
  2. Set Clip start (for example 12:30) and Clip length (for example 45 seconds).
  3. Type a Title and, if you like, a Subtitle with the show name.
  4. Add a Cover image URL (JPG, PNG or WebP).
  5. Choose the Video formats you need and click Start.
  6. Open the Output tab: each row has an MP4 link and a preview image. The files are also in the run's key-value store.

From a podcast RSS feed

  1. Paste the feed into Podcast RSS feed URL. Most hosts show it under "RSS feed" or "Distribution" (Buzzsprout, Libsyn, Transistor, Captivate, Podbean, Spotify for Podcasters, Acast and others).
  2. Keep Episode from the feed at 1 for the newest episode, or set 2, 3 and so on. To pick by name, type a word from the episode title into Episode title contains.
  3. Leave Title, Subtitle and Cover image URL empty to use the episode title, the show name and the episode or show artwork from the feed. Fill them to override.
  4. Set the clip start and length, pick formats, start the run.

Several clips in one run

Use the Clip list field. Each item is one clip; every clip is rendered in each selected format:

[
{ "start": "2:15", "duration": 40, "title": "Why most launches fail" },
{ "start": "18:02", "end": "18:50" },
"41:10-41:55"
]

start and end accept seconds (135), mm:ss (2:15) or hh:mm:ss (1:02:15). A clip may also be a range string like "41:10-41:55". Give duration in seconds or end as a time. A per-clip title or subtitle overrides the run-wide text for that clip only.

Captions from your transcript

Paste SRT or WebVTT text into Captions, or give a link to the file in Captions file URL. With Caption times are relative to set to The whole episode (the default), the times in your file count from the start of the episode, as in a full transcript; the Actor shows only the lines inside each clip, shifted to the clip's own time. If your subtitle file was made for the clip itself, choose The clip.

The Actor does not transcribe audio. If you have no transcript, export one from your podcast host, from YouTube, or from a speech-to-text tool, as SRT or VTT.

Input reference

FieldWhat it doesDefault
audioUrlDirect link to the audio file, up to 500 MBempty - demo clip
rssUrlPodcast RSS feed; used when audioUrl is empty-
episodeEpisode from the feed: 1 = latest1
episodeTitlePick the feed episode whose title contains this text, or whose GUID equals it-
startTimeClip start when clips is empty0:00
durationSecondsClip length, 3 to 180 seconds30
clipsList of clips, up to 20-
formatssquare, vertical, horizontalsquare
title, subtitleText on the videofrom the feed
coverImageUrlCover art, JPG, PNG or WebP up to 15 MBfrom the feed
useFeedCoverUse feed artwork when no cover link is giventrue
waveStylebars, wave or linebars
backgroundcolor or blurred-covercolor
backgroundColor, waveColor, textColor, accentColorHex colors like #38BDF8dark navy, sky blue, white, pink
showProgressBarProgress bar at the bottomtrue
fadeInOutShort audio fade at both endstrue
qualitystandard (25 fps) or high (30 fps, finer detail)standard
captionsTextSRT or WebVTT text-
captionsUrlLink to an SRT or WebVTT file-
captionsTimelineepisode or clipepisode

Formats

FormatSizeBest for
Square1080 x 1080Instagram feed, LinkedIn, X, Facebook
Vertical1080 x 1920Instagram Reels and Stories, TikTok, YouTube Shorts
Horizontal1920 x 1080YouTube, websites, presentations

In the square and horizontal formats the cover sits on the left with the title beside it; in the vertical format the cover is large and centered at the top with the title below. The waveform fills the middle and the captions sit above the progress bar.

Waveform styles

  • Bars - blocky equalizer bars, mirrored around the center line. Clean, readable at small sizes and gives the smallest files. The default.
  • Wave - a filled waveform that looks like an audio editor. Very lively, but its detail makes files several times larger; choose High quality if file size matters.
  • Line - a thin oscilloscope line drawn from the audio samples. Minimal and elegant on dark backgrounds.

Output

Every rendered video is one row in the dataset:

{
"type": "clip",
"clip": 1,
"format": "vertical",
"width": 1080,
"height": 1920,
"videoUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/clip-1-vertical.mp4",
"thumbnailUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/clip-1-vertical.jpg",
"startTime": "12:30",
"endTime": "13:15",
"startSeconds": 750,
"durationSeconds": 45,
"trimmedToAudioEnd": false,
"title": "Episode 42: Shipping your first product",
"subtitle": "The Indie Builders Podcast",
"waveStyle": "bars",
"captionLines": 9,
"bytes": 3456789,
"source": {
"type": "rss",
"host": "feeds.example.com",
"feedTitle": "The Indie Builders Podcast",
"episodeTitle": "Episode 42: Shipping your first product",
"episodePublishedAt": "2026-10-19T08:00:00.000Z",
"audioSeconds": 3725.1,
"audioCodec": "mp3"
},
"demo": false,
"warnings": [],
"videoKey": "clip-1-vertical.mp4",
"thumbnailKey": "clip-1-vertical.jpg",
"renderSeconds": 31.4,
"createdAt": "2026-10-27T09:15:02.000Z"
}

The MP4 and JPG files are stored in the run's default key-value store under clip-<number>-<format>.mp4 and .jpg. Open them from the run's Storage tab, or fetch the links with your API token if your storage access is restricted. Apify keeps run storages for the retention period of your plan; copy the files elsewhere if you need them longer.

When something cannot be rendered, the dataset gets a free error row instead, for example:

{ "type": "error", "clip": 2, "format": "square", "error": "CLIP_OUT_OF_RANGE", "errorMessage": "Clip starts at 1:05:00, the audio is 58:12 long" }

Pricing

Pay per event: one clip event for every finished MP4. One clip in three formats counts as three videos. The price is flat per video for any length up to 3 minutes, and it is lower on higher Apify plans - see the Pricing tab for the current numbers.

You are not charged for:

  • the free demo clip (no audio given),
  • clips that fail or fall outside the audio,
  • clips skipped because the run's spending limit was reached,
  • error rows of any kind.

Set Maximum cost per run in the run options to cap your spend: the Actor checks the limit before each render and stops cleanly, listing the clips it skipped.

Automate it with n8n, Make, Zapier and the API

The Actor is built to be called by automations. A typical flow:

  1. Trigger: a new item in your podcast RSS feed (RSS trigger in n8n, Make or Zapier), or a schedule.
  2. Run the Actor with the feed URL and the clip times (or a fixed start like the first 45 seconds after the intro).
  3. Use the output: take videoUrl from the dataset and post it to social media, upload it to Google Drive or Dropbox, or send it to Slack for approval.

Calling it from the API (replace <YOUR_APIFY_TOKEN>):

curl -X POST "https://api.apify.com/v2/acts/maksym_kotenko~podcast-audiogram-generator/run-sync-get-dataset-items" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"rssUrl": "https://feeds.example.com/your-show.xml",
"startTime": "1:30",
"durationSeconds": 45,
"formats": ["vertical", "square"]
}'

run-sync-get-dataset-items waits for the run and returns the dataset rows, each with a videoUrl. For many or long clips use the asynchronous runs endpoint with a webhook, because synchronous calls time out after 5 minutes.

In n8n, Make and Zapier use the Apify integration to run the Actor, or a plain HTTP request with the call above. Map videoUrl from the dataset to the next step.

Input examples

Latest episode from a feed, vertical and square, first 45 seconds after a 1:30 intro:

{
"rssUrl": "https://feeds.example.com/your-show.xml",
"startTime": "1:30",
"durationSeconds": 45,
"formats": ["vertical", "square"]
}

Three highlights from one MP3 with your brand colors and captions:

{
"audioUrl": "https://cdn.example.com/episodes/episode-42.mp3",
"clips": ["4:12-4:58", "17:40-18:25", "39:05-39:50"],
"formats": ["vertical"],
"title": "Episode 42: Shipping your first product",
"subtitle": "The Indie Builders Podcast",
"coverImageUrl": "https://cdn.example.com/art/show-cover.jpg",
"waveStyle": "bars",
"backgroundColor": "#111827",
"waveColor": "#FBBF24",
"accentColor": "#F87171",
"captionsUrl": "https://cdn.example.com/episodes/episode-42.srt"
}

Blurred cover background with a filled wave, horizontal for YouTube:

{
"rssUrl": "https://feeds.example.com/your-show.xml",
"episodeTitle": "interview",
"startTime": "22:00",
"durationSeconds": 60,
"formats": ["horizontal"],
"waveStyle": "wave",
"background": "blurred-cover",
"quality": "high"
}

Tips for good clips

  • Length: 30 to 60 seconds works best on Instagram, TikTok, Shorts and LinkedIn. Keep the strongest sentence in the first 3 seconds.
  • Captions: much social video is watched with the sound off, so add your transcript whenever you have one.
  • Titles: short titles read better on phones. The Actor shrinks long titles to fit, up to four lines.
  • Contrast: keep the wave color bright against the background, and the text color light on dark backgrounds or dark on light ones.
  • Cover art: a square image of at least 600 x 600 pixels looks sharp in every format.

Limits

  • Audio files up to 500 MB; any format FFmpeg reads: MP3, M4A/AAC, WAV, OGG, OPUS, FLAC and most others.
  • Clips from 3 to 180 seconds; longer requests are shortened to 180 seconds with a warning.
  • Up to 20 clips per run, each in up to three formats.
  • A clip that runs past the end of the audio is cut at the end (trimmedToAudioEnd: true); a clip that starts after the end is an error row.
  • Text uses the DejaVu Sans font: Latin, Cyrillic and Greek scripts render; Chinese, Japanese, Korean and emoji are not supported yet.
  • Rendering speed with the default 2 GB memory: about 30 to 40 seconds for a 60-second clip. More memory gives more CPU and faster runs at about the same compute cost. Large batches may need a longer run timeout.

FAQ

Do I need an account anywhere else? No. You only need the audio to be reachable by a public link or a public RSS feed.

Does the Actor transcribe my audio? No. It burns in captions you provide as SRT or WebVTT. Most podcast hosts can export a transcript in one of these formats.

Is there a watermark? No.

Can I use a private or premium feed? Yes, if the feed URL with its token works from the internet. The token stays in your input; the Actor logs only the host name.

Why is my audio link rejected? The link must lead straight to the file. Links to pages on Google Drive, Dropbox or a podcast website are web pages, not files. Use the direct download link or the RSS feed instead. Links to private or local network addresses are refused for security.

Can I choose fonts or add a logo? Not yet. Tell us in the Issues tab what you need.

How long are the files kept? As long as Apify keeps your run's storage. Download or copy them if you need them longer.

Can I run it on a schedule? Yes. Create a task with your feed, set Episode from the feed to 1, and schedule it after your usual release time.

Troubleshooting

ErrorWhat it meansWhat to do
INVALID_INPUTA field has a value the Actor cannot useRead the message; it names the field
AUDIO_DOWNLOAD_FAILEDThe audio host answered with an error or did not answerCheck that the link opens the file in a browser
FILE_TOO_LARGEThe audio is over 500 MBUse a compressed MP3 or M4A version
URL_NOT_ALLOWEDThe link points to a private or local addressUse a public link
FEED_INVALIDThe feed link returned a web page, not RSSUse the RSS URL from your podcast host
EPISODE_NOT_FOUNDNo episode matches the number or titleCheck episode or episodeTitle
AUDIO_UNREADABLEThe file is not audio FFmpeg can readCheck the file format
CLIP_OUT_OF_RANGEThe clip starts after the audio endsCheck the start time
LIMIT_REACHEDThe run's spending limit stopped further clipsRaise the maximum cost per run
RENDER_FAILEDThe video could not be renderedRun again; if it repeats, report it in Issues with the run link

Warnings in the warnings field (cover or captions skipped) do not stop the clip; the video is rendered without that element.

Your rights to the audio

You are responsible for having the right to use the audio, artwork and captions you give the Actor - for example your own podcast, or content you have permission to share. The Actor only converts the files you point it to; it does not search for or collect other people's podcasts.

Support

Found a bug or need a feature (custom fonts, logos, more styles, other sizes)? Open an issue in the Issues tab with a link to the run. Feedback shapes the next versions.