Convert WebM to MP4
Turn WebM, the open web-native video format supported by all modern browsers, into MP4, the most widely supported video container on the web and devices. FileChanger runs the video conversion in one call, no local tooling to install.
In the browser
Upload a file and download the result, no pipeline required. Open the converter.
One API call
POST the file with from=webm and to=mp4, get the converted bytes back. Jump to the code.
From an agent
FileChanger ships an MCP server, so agents can run this conversion themselves. See the docs for setup.
Uploading something you care about? How to convert files safely explains what to check before you trust any converter, and Security and data handling describes exactly what we store and for how long.
Convert WebM to MP4 in code
The same call from any language: POST the file to /api/convert, the response body is the converted file.
curl -X POST https://filechanger.io/api/convert \
-H "X-Api-Key: fc_your_api_key_here" \
-F "file=@input.webm" \
-F "from=webm" \
-F "to=mp4" \
-o output.mp4import requests
with open("input.webm", "rb") as f:
response = requests.post(
"https://filechanger.io/api/convert",
headers={"X-Api-Key": "fc_your_api_key_here"},
files={"file": f},
data={"from": "webm", "to": "mp4"},
)
response.raise_for_status()
with open("output.mp4", "wb") as out:
out.write(response.content)const formData = new FormData();
formData.append("file", fileInput.files[0]);
formData.append("from", "webm");
formData.append("to", "mp4");
const response = await fetch("https://filechanger.io/api/convert", {
method: "POST",
headers: { "X-Api-Key": "fc_your_api_key_here" },
body: formData,
});
const output = await response.blob();import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.file.Path;
String boundary = "----FormBoundary" + System.currentTimeMillis();
byte[] fileBytes = java.nio.file.Files.readAllBytes(Path.of("input.webm"));
String body = "--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"file\"; filename=\"input.webm\"\r\n"
+ "Content-Type: application/octet-stream\r\n\r\n"
+ new String(fileBytes) + "\r\n"
+ "--" + boundary + "\r\nContent-Disposition: form-data; name=\"from\"\r\n\r\nwebm\r\n"
+ "--" + boundary + "\r\nContent-Disposition: form-data; name=\"to\"\r\n\r\nmp4\r\n"
+ "--" + boundary + "--";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://filechanger.io/api/convert"))
.header("X-Api-Key", "fc_your_api_key_here")
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.POST(BodyPublishers.ofString(body))
.build();
HttpResponse<byte[]> response = client.send(
request, BodyHandlers.ofByteArray());
java.nio.file.Files.write(Path.of("output.mp4"), response.body());import Network.HTTP.Client
import Network.HTTP.Client.MultipartFormData
import qualified Data.ByteString.Lazy as BL
main :: IO ()
main = do
manager <- newManager defaultManagerSettings
initialReq <- parseRequest "POST https://filechanger.io/api/convert"
let req = initialReq
{ requestHeaders = [("X-Api-Key", "fc_your_api_key_here")] }
request <- formDataBody
[ partFileSource "file" "input.webm"
, partBS "from" "webm"
, partBS "to" "mp4"
] req
response <- httpLbs request manager
BL.writeFile "output.mp4" (responseBody response)About WebM
WebM is the open, royalty-free video format Google built for the web: VP9 or VP8 video with Opus or Vorbis audio, in a container derived from Matroska. Every modern browser plays it natively and browsers also produce it, which is why so many WebM files start life as screen recordings, downloads, and camera captures from a web page rather than as camera footage.
About MP4
MP4 is the video container the world settled on: H.264 video alongside AAC audio in an MPEG-4 file, played by every phone, browser, smart TV, and editing suite without extra codecs. Cameras, phones, and screen recorders write it by default, which makes it both the usual starting point for a conversion and the safest thing to hand someone else.
Frequently asked questions
How do I convert WebM to MP4?
Upload your file in the browser converter and pick MP4 as the target, or POST it to /api/convert with from=webm and to=mp4. The response body is the converted file.
Is converting WebM to MP4 free?
Yes. Every account gets 200 MB of conversions free, metered on input size. After that you pay only for what you convert, from $0.10 per GB, with no monthly fee. See pricing for the paid tiers.
Is there an API for WebM to MP4 conversion?
Yes, this whole conversion is one POST to /api/convert (the code examples above show it in five languages), plus an MCP server so AI agents can run it directly.
Why convert WebM to MP4?
WebM plays natively in browsers, but plenty of software will not touch it: iPhones and iPads, most smart TVs, and editors like Premiere and Final Cut all expect MP4. Converting to MP4 (H.264 video, AAC audio) is what makes a browser-recorded or downloaded WebM usable everywhere else.
Does converting WebM to MP4 lose quality?
The video is decoded from VP8 or VP9 and re-encoded as H.264, so it is a lossy step in the strict sense. FileChanger encodes at CRF 23, the quality level where the result is visually indistinguishable from the source for ordinary footage.
Does the audio survive the conversion?
Yes. The Opus or Vorbis audio track in the WebM is re-encoded to AAC and muxed into the MP4 alongside the video, in sync, so the result plays with sound anywhere MP4 does.