Extract Audio from TS to CAF — Free Online Tool

Extract audio from MPEG-2 Transport Stream (.ts) broadcast files and save it as a Core Audio Format (.caf) file using uncompressed PCM audio — ideal for Apple-ecosystem workflows that require high-fidelity source material from broadcast or live-stream recordings. The video stream is discarded entirely, and the audio is decoded and rewritten as 16-bit PCM inside Apple's CAF container, which supports files larger than the 4GB limit that AIFF and WAV impose.

FFmpeg Command

Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg

Free — no uploads, no signups. Your files never leave your browser.

Estimated output:

Conversion Complete!

Download

How It Works

TS files are broadcast containers that typically carry AAC, AC-3, or MP3 audio alongside H.264 or H.265 video, all multiplexed into MPEG-2 transport packets. During this conversion, FFmpeg demuxes the transport stream, strips the video stream entirely, and decodes the audio to raw PCM samples. Those samples are then repackaged as 16-bit little-endian PCM (pcm_s16le) inside a CAF container. This is a full decode-and-re-encode of the audio — not a remux — because CAF's default codec (PCM) is almost certainly different from what the TS file carries (typically AAC or AC-3). The result is an uncompressed, lossless representation of whatever audio was in the broadcast stream, making it suitable as a clean editing source in Logic Pro, GarageBand, or other Apple tools.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg binary — the underlying engine that performs all demuxing, decoding, and encoding. When run in the browser, this is executed via FFmpeg.wasm, a WebAssembly port that runs entirely client-side without sending your TS file to any server.
-i input.ts Specifies the input MPEG-2 Transport Stream file. FFmpeg reads and demuxes the TS container, separating the interleaved video, audio, and any subtitle or data packets from the broadcast stream.
-vn Disables video output entirely, telling FFmpeg to ignore all video streams in the TS file (typically H.264 or H.265). Since CAF is a pure audio container and we only want the audio track, this flag ensures no video processing overhead occurs and no video data is written to the output.
-c:a pcm_s16le Decodes the TS file's compressed audio (usually AAC or AC-3 from broadcast sources) and re-encodes it as 16-bit signed little-endian PCM — an uncompressed audio format that is the native default for Apple's CAF container and fully supported by Core Audio across all Apple platforms.
-b:a 128k Specifies a target audio bitrate of 128 kbps. For PCM audio this flag is effectively ignored since uncompressed PCM has a fixed bitrate determined by sample rate and bit depth rather than a compression target — it is included in the command for consistency but does not affect the output.
output.caf Defines the output file as a Core Audio Format file. FFmpeg uses the .caf extension to select the CAF muxer, writing the raw PCM audio data into Apple's container structure, which supports 64-bit file sizes and is natively readable by macOS, iOS, and all Apple audio frameworks.

Common Use Cases

  • Extracting the audio track from a recorded broadcast TV segment (e.g., a DVR-captured .ts file) to import into Logic Pro for post-production mixing
  • Converting a live-stream recording saved as a .ts file into a high-fidelity CAF source file before mastering audio for Apple Podcasts or Apple Music distribution
  • Pulling clean, uncompressed audio out of an HLS-recorded transport stream for forensic audio analysis or legal transcription, where lossy re-encoding must be avoided
  • Archiving the audio portion of broadcast news or sports recordings as uncompressed PCM in CAF format, taking advantage of CAF's lack of the 4GB file size ceiling for long recordings
  • Preparing audio extracted from a multi-audio-track TS broadcast file (e.g., a bilingual TV broadcast) for import into Xcode or an Apple developer project as a CAF asset
  • Converting a capture from an MPEG-2 TS stream source (e.g., a satellite or cable recording) into a CAF file for waveform editing in a Mac-native audio workstation

Frequently Asked Questions

The output itself is uncompressed 16-bit PCM, so no further lossy compression is applied during the conversion. However, if the original TS file's audio was already encoded in a lossy format like AAC or AC-3 — which is nearly universal in broadcast TS files — that generation of lossy compression is permanently baked into the source material. Decoding it to PCM does not recover that lost information, but it does ensure no additional quality loss occurs beyond what already existed in the broadcast stream.
CAF supports AAC and other codecs, but its default and most universally compatible audio format within Apple's ecosystem is uncompressed PCM. The tool uses pcm_s16le (16-bit signed little-endian PCM) to produce a clean, editable source file rather than passing through compressed audio that may have playback or editing limitations on Apple platforms. If you specifically need AAC inside a CAF container, you can modify the FFmpeg command by replacing '-c:a pcm_s16le' with '-c:a aac'.
By default, FFmpeg selects the first audio stream in the TS file, which is typically the primary language track. CAF does not support multiple audio tracks in a single file, so only one track can be exported per run. To extract a specific alternate track, add '-map 0:a:1' (for the second audio track) or '-map 0:a:2' (for the third) to the FFmpeg command before the output filename. You would need to run the command separately for each track you want to extract.
Because the output codec is PCM (uncompressed), the '-b:a 128k' bitrate flag has no meaningful effect — PCM audio's size is determined by sample rate and bit depth, not a target bitrate. To increase fidelity, you can change the codec to pcm_s24le or pcm_s32le for 24-bit or 32-bit output, for example: 'ffmpeg -i input.ts -vn -c:a pcm_s24le output.caf'. If you want a compressed output instead, switching to '-c:a aac -b:a 256k' would produce a smaller AAC-encoded CAF file.
Yes — on macOS or Linux you can use a shell loop: 'for f in *.ts; do ffmpeg -i "$f" -vn -c:a pcm_s16le "${f%.ts}.caf"; done'. On Windows Command Prompt, the equivalent is: 'for %f in (*.ts) do ffmpeg -i "%f" -vn -c:a pcm_s16le "%~nf.caf"'. Each TS file will be processed sequentially, producing one CAF file per input with the same base filename.
No. CAF does not support subtitles or chapters, and FFmpeg does not map TS broadcast metadata (such as program name, channel, or broadcast timestamp) into the CAF container during this conversion. Subtitle streams and any teletext data in the TS file are silently dropped. If preserving metadata is important, consider extracting it separately before conversion or embedding relevant information as CAF text chunks using additional FFmpeg flags.

Technical Notes

MPEG-2 Transport Streams are designed for lossy broadcast environments and carry audio almost exclusively in compressed formats — AAC in digital broadcast and streaming contexts, or AC-3 in North American cable and satellite transmissions. This means the conversion to CAF with pcm_s16le involves a full decode pass: the compressed audio bitstream is fully decompressed to raw PCM samples before being written into the CAF container. The output file will be substantially larger than the input audio portion — a 128 kbps AAC track at 1 hour is roughly 56 MB, while the equivalent pcm_s16le CAF file at 44.1 kHz stereo will be approximately 1.4 GB. CAF's architecture is specifically designed to handle this: unlike AIFF or WAV, it uses 64-bit file offsets and imposes no 4 GB ceiling, making it suitable for long-form broadcast recordings. On Apple Silicon and Intel Macs, CAF/PCM files are natively supported by Core Audio at the OS level, enabling seamless drag-and-drop into Logic Pro, Final Cut Pro, GarageBand, and Xcode without requiring any additional codec installation. Note that if the TS stream contains multiple audio programs (a feature of broadcast multiplexing), FFmpeg will default to the first detected audio stream unless explicitly mapped.

Related Tools