WAVE MP4
TS · to · MP4

Convert TS to MP4

TS files (short for "Transport Stream") are what you get when you've recorded from a digital TV tuner, captured a live stream with yt-dlp, saved video from a browser dev-tools workflow, or downloaded HLS streaming segments. TS was designed for broadcast - meant to survive dropped packets during transmission - which makes it awkward for regular playback: iOS refuses it, most upload pipelines strip it, and even VLC treats it as a second-class file. Fortunately what's inside a TS file is almost always the same H.264 video and AAC audio that MP4 accepts natively. Wave repackages the streams into MP4 without touching the picture or sound, so the same content plays cleanly everywhere.

Under the hood

What actually changes

TS source VIDEO H.264 / HEVC AUDIO AAC / AC-3 MP4 same streams VIDEO copied AUDIO copied (AC-3 -> AAC) REMUX* or re-encoded
MPEG-TS wraps video MP4 already accepts, so the picture is untouched. AAC audio copies; broadcast AC-3 converts to AAC so every browser plays it. * Wave inspects the source and picks the fast path when it can.

MPEG Transport Stream was designed to survive dropped packets during broadcast, so it interleaves small chunks of video, audio, and metadata. That structure isn't suited to random-access playback, which is why local players sometimes struggle with TS files. MP4's indexed structure fixes this.

The video inside a TS (typically H.264 or HEVC) is MP4-compatible, so it is never re-encoded. Wave rebuilds the MP4 index from scratch and adds a fast-start atom so the file seeks instantly. AAC audio copies straight across; broadcast captures with AC-3 (Dolby Digital) audio get that track converted to AAC, because Chrome and Firefox play AC-3-in-MP4 as a silent video.

MPEG-TS was standardized in 1994 as part of the MPEG-2 Systems specification, primarily so DVB (Digital Video Broadcasting, the European broadcast standard) and ATSC (its American cousin) could transmit multiple TV channels over a single satellite or cable feed. Each 188-byte packet carries a program ID (PID) that lets a receiver demultiplex the streams it wants and ignore the rest - the whole design is oriented around lossy transmission and receiver simplicity, which is exactly what makes local playback awkward.

HLS (HTTP Live Streaming, Apple's adaptive streaming standard) uses TS as its segment container, which is why so many downloaded-video files end up as .ts. yt-dlp, streamlink, and OBS all produce TS segments as intermediate outputs. Wave's remux takes the same streams and gives them a proper MP4 container - the picture and sound stay identical, and seeking becomes instant.

How to convert

Three steps.

  1. 01

    Step 1

    Drop the TS file onto the card.

  2. 02

    Step 2

    Wave inspects the streams and confirms the fast-copy path.

  3. 03

    Step 3

    Convert and save the MP4.

FAQ

Answers, specifically.

Why does my TS file play but seek slowly?

TS has no random-access index. Every seek forces the player to scan forward. MP4 with a proper moov atom seeks instantly.

I have a bunch of .ts chunks from an HLS stream. Can I convert one big file?

Concatenating HLS chunks isn't the current build's scope - you'd need to stitch them first (ffmpeg concat, or a small script). Wave then converts the stitched TS to MP4 as a single remux.

Will Dolby audio survive?

It survives as sound, converted to AAC. AC-3 and E-AC-3 (Dolby Digital / Digital Plus) are legal inside MP4, but Chrome and Firefox have no decoder for them, so a copied track plays as silence there. Wave converts them to AAC, keeping up to 5.1 channels, so the MP4 has sound in every browser and on every phone.

Broadcast recordings have multiple audio tracks. Do they all come across?

The current build outputs a single audio track. Multi-track passthrough is on the roadmap.

Does closed-captioning transfer?

CEA-608 and CEA-708 captions embedded in the video stream survive because Wave copies the stream bit-for-bit. Standalone caption tracks aren't remuxed in the current build.

What is the difference between .ts and .mts / .m2ts?

Same container underneath (MPEG-TS packets), different conventions on top. .ts is generic MPEG Transport Stream, used by broadcast recordings and HLS chunks. .mts / .m2ts is the AVCHD variant Sony and Panasonic use for camcorders and AVCHD Blu-rays - see our <a href="/mts-to-mp4/">MTS-to-MP4 page</a> for that path.

My .ts is from an OBS recording. Does it convert cleanly?

Yes. OBS Studio's TS output is standard MPEG-TS with H.264 or HEVC video plus AAC audio - exactly Wave's remux path. If you can, recording OBS directly to MP4 saves the conversion step; TS mode exists for crash-recovery reasons (a truncated TS is still playable, a truncated MP4 often is not).

The .ts was made by concatenating HLS segments. Any issues?

Usually not. HLS segments are designed to concatenate cleanly at packet boundaries. If the concat left duplicate PCR (Program Clock Reference) timestamps at segment joins, you may see brief audio glitches; those are in the source, not introduced by the conversion.

Related

Other converters.