Publishing workflows have always been format-intensive — the chain from camera to website to print involves a series of format handoffs where each tool expects a different spec. A photographer delivers CR2 RAW files that need to become web-ready JPEGs. A video editor exports ProRes that needs to become H.264 MP4 for streaming. A manuscript in DOCX needs to become both EPUB for digital stores and PDF for print-on-demand. Font files licensed for print need WOFF2 versions for the web edition. These conversions are individually simple — but in aggregate they're a maintenance burden.

Format conversion in media and publishing workflows

The conversion requirements across publishing and media production:

  • Photography — RAW files (CR2, NEF, ARW, DNG) → JPEG/TIFF for editing delivery, TIFF → JPEG for web, HEIF → JPEG for camera roll
  • Video production — ProRes/MOV → H.264 MP4 for streaming, MP4 → WebM for web embeds, video → GIF for social previews
  • Digital publishing — DOCX manuscript → EPUB for digital stores, EPUB → MOBI for Kindle, EPUB → PDF for print-on-demand
  • Print design — AI/EPS → PDF for print vendors, TIFF → JPEG for web companions, high-res JPEG → WebP for digital edition
  • Web publishing — image optimization (JPEG/PNG → WebP), video transcoding for embedded players
  • Typography — TTF/OTF → WOFF2 for web use, OTF → TTF for older system compatibility, font subsetting
  • Audio — WAV masters → MP3 for distribution, FLAC → MP3 for streaming, WAV → M4A/AAC for Apple platforms

Format pairs publishing teams convert most often

The specific routes in media and publishing workflows:

  • CR2 / NEF / ARW → JPG — normalize RAW photography deliveries for web or layout (dcraw engine)
  • TIFF → JPG / WebP — compress high-res print images for web editions
  • MOV / MKV → MP4 — transcode editorial video for streaming distribution (FFmpeg)
  • MP4 → WebM — web-native video format for embedded players without plugins
  • MP4 → GIF — animated previews for social media, newsletters, article headers
  • EPUB → PDF — generate print-on-demand or reviewer copies from digital manuscripts
  • EPUB → MOBI / AZW3 — Kindle-compatible format conversion (Calibre)
  • DOCX → EPUB — convert Word manuscripts to ebook format
  • TTF / OTF → WOFF2 — convert licensed print fonts for web editions (fonttools)
  • WAV → FLAC — lossless audio compression for archive masters
  • FLAC → MP3 — distribution-ready audio from lossless masters

The browser tool for quick format checks

The browser tool at changethisfile.com is useful for validating a conversion before automating it. Drop in a representative RAW file or video clip to see how it converts before running a batch.

Image and font conversions run client-side — files stay on your device, nothing is uploaded. This matters for unreleased editorial photography or manuscripts under embargo.

RAW photo, video, audio, document, and ebook conversions upload to the server and are auto-deleted after processing.

RAW photo processing pipeline

Photography deliveries in RAW format (CR2, NEF, ARW, DNG) need to be converted to JPEG or TIFF for editing and web delivery. The dcraw engine handles the conversion server-side.

import requests
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed

CTF_API_KEY = "ctf_sk_your_key_here"
RAW_EXTENSIONS = {"cr2", "cr3", "nef", "arw", "dng", "raf", "orf", "rw2"}

def raw_to_jpg(raw_path: Path, out_dir: Path) -> str:
    """Convert a RAW photo to JPEG."""
    with open(raw_path, "rb") as f:
        resp = requests.post(
            "https://changethisfile.com/v1/convert",
            headers={"Authorization": f"Bearer {CTF_API_KEY}"},
            files={"file": f},
            data={"source": raw_path.suffix.lstrip(".").lower(), "target": "jpg"},
            timeout=60,
        )
    resp.raise_for_status()
    out_path = out_dir / raw_path.with_suffix(".jpg").name
    out_path.write_bytes(resp.content)
    return str(out_path)

def process_raw_delivery(raw_dir: str, out_dir: str, workers: int = 4) -> dict:
    """Convert all RAW files in a delivery folder to JPEG."""
    in_dir = Path(raw_dir)
    out = Path(out_dir)
    out.mkdir(parents=True, exist_ok=True)

    raws = [p for p in in_dir.iterdir() if p.suffix.lstrip(".").lower() in RAW_EXTENSIONS]
    print(f"Processing {len(raws)} RAW files...")

    ok, fail = [], []
    with ThreadPoolExecutor(max_workers=workers) as pool:
        futures = {pool.submit(raw_to_jpg, r, out): r for r in raws}
        for future in as_completed(futures):
            raw = futures[future]
            try:
                result = future.result()
                ok.append(result)
                print(f"  {raw.name} → {Path(result).name}")
            except Exception as e:
                fail.append(str(raw))
                print(f"  FAIL {raw.name}: {e}")

    return {"converted": ok, "failed": fail}

Digital publishing workflow: EPUB, MOBI, PDF

A complete digital publishing pipeline typically needs the same manuscript in multiple formats. Calibre handles the cross-format conversions.

import requests
from pathlib import Path

CTF_API_KEY = "ctf_sk_your_key_here"

def publish_ebook(epub_path: str, output_dir: str) -> dict:
    """
    From a single EPUB source, generate:
    - MOBI/AZW3 for Kindle
    - PDF for print-on-demand and reviewer copies
    Returns dict mapping format to output path.
    """
    out_dir = Path(output_dir)
    out_dir.mkdir(parents=True, exist_ok=True)
    base = Path(epub_path).stem
    results = {}

    for target in ["mobi", "pdf"]:
        with open(epub_path, "rb") as f:
            resp = requests.post(
                "https://changethisfile.com/v1/convert",
                headers={"Authorization": f"Bearer {CTF_API_KEY}"},
                files={"file": f},
                data={"source": "epub", "target": target},
                timeout=180,
            )
        resp.raise_for_status()
        out_path = out_dir / f"{base}.{target}"
        out_path.write_bytes(resp.content)
        results[target] = str(out_path)
        print(f"Generated: {out_path.name}")

    return results

# Usage:
# publish_ebook("./manuscript-final.epub", "./distribution")
# → distribution/manuscript-final.mobi
# → distribution/manuscript-final.pdf

Pricing for media and publishing scale

PlanConversions/monthPriceRight for
Free1,000$0Individual photographers, indie publishers, occasional batch jobs
Hobby10,000$29/moSmall publications, regular photo/video delivery processing
Startup50,000$99/moActive publications, automated RAW delivery pipelines, ebook distribution
Scale250,000$499/moHigh-volume media operations, stock photography, large archive processing

A news publication processing 200 photos per day converts at ~6,000/month — Hobby plan. A stock photography platform processing full image libraries would need Scale.

FAQ

What RAW formats are supported?

The dcraw engine supports Canon CR2/CR3, Nikon NEF, Sony ARW, Adobe DNG, Fujifilm RAF, Olympus ORF, Panasonic RW2, and most other camera RAW formats. Check the converter with a sample file if you're unsure about a specific camera model.

Does RAW conversion preserve EXIF data?

EXIF metadata is included in the output JPEG. Camera model, lens, exposure data, GPS coordinates (if present) are preserved. Color profiles depend on the dcraw rendering — for calibrated color management workflows, compare output against your camera manufacturer's software.

How does EPUB → MOBI compare to Amazon's Kindle Convert tool?

Calibre produces valid MOBI output that works on Kindle hardware and apps. For Amazon KDP publishing specifically, KDP's own upload accepts EPUB directly and does its own conversion. Use our converter for reader-side distribution (sideloading) or format testing — for KDP publishing, upload EPUB directly to Amazon.

Can I convert proprietary video codecs like Apple ProRes?

FFmpeg supports ProRes and many other professional codecs. ProRes → MP4 H.264 is a common workflow for editorial-to-web transcoding. For very large ProRes files (multi-GB), use async mode — the conversion takes longer but completes in the background.

What font formats does the converter support?

TTF, OTF, WOFF, WOFF2, and EOT. For web publishing, TTF/OTF → WOFF2 is the most common path — WOFF2 is the smallest web font format and is supported by all modern browsers. EOT is legacy (IE only) and rarely needed for new projects.

Can I convert audio from a video file (extract audio track)?

Video-to-audio extraction (MP4 → MP3, MOV → M4A, MKV → AAC, etc.) is supported. This is useful for podcast-style audio versions of recorded interviews or lectures.

Specific conversion guides for publishing tasks: