Format Conversion Workflows
Learn how to convert assets between different formats and when to use each format type.
Image Format Conversion
When to Use Each Format
- WebP: Modern format, best compression, use for photos and complex images
- AVIF: Even better compression than WebP, use when browser support allows
- SVG: Vector graphics, logos, icons, illustrations
- PNG: Transparency required, screenshots, simple graphics
- JPEG: Photos without transparency, older browser support
Conversion Tools
Command Line Tools
ImageMagick:
# Convert PNG to WebP
convert input.png -quality 85 output.webp
# Batch convert all PNGs in directory
for file in *.png; do convert "$file" -quality 85 "${file%.png}.webp"; done
# Create multiple sizes
convert input.jpg -resize 1920x1080 hero-1080p.jpg
convert input.jpg -resize 1280x720 hero-720p.jpg
Sharp (Node.js):
// In your build script
const sharp = require('sharp');
await sharp('input.png')
.webp({ quality: 85 })
.toFile('output.webp');
// With multiple formats
await sharp('input.png')
.resize(1200, 800)
.toFormat('webp')
.toFile('output.webp');
Nuxt Image Module
Install and configure:
npm install --save-dev @nuxt/image
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/image'],
image: {
formats: ['webp', 'avif'],
quality: 85
}
})
Usage in components:
<template>
<NuxtImg
src="/images/hero-background.jpg"
format="webp"
quality="85"
alt="Hero background"
/>
</template>
Video Format Conversion
Recommended Formats
- WebM: Best for web, VP9 codec
- MP4: Wide compatibility, H.264 codec
- Multiple formats: Provide both for maximum compatibility
FFmpeg Commands
# Convert to WebM
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 output.webm
# Convert to optimized MP4
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium output.mp4
# Create thumbnail
ffmpeg -i input.mp4 -ss 00:00:01 -vframes 1 thumbnail.jpg
Font Format Conversion
Modern Font Stack
- WOFF2: Primary format, best compression
- WOFF: Fallback for older browsers
- TTF/OTF: Original format, keep for reference
Conversion Process
Using fonttools:
# Install fonttools
pip install fonttools brotli
# Convert TTF to WOFF2
pyftsubset input.ttf --output-file=output.woff2 --flavor=woff2
Automated Workflow Integration
Nuxt Build Hook
// nuxt.config.ts
export default defineNuxtConfig({
hooks: {
'build:before': async () => {
// Your conversion logic here
await convertAssets();
}
}
})
GitHub Actions Example
name: Process Assets
on:
push:
paths:
- 'public/images/**'
jobs:
convert:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Convert to WebP
run: |
sudo apt-get install imagemagick
./scripts/convert-images.sh
Best Practices
- Always keep original files in a separate directory
- Document your conversion process
- Use version control for converted assets
- Test converted assets across browsers
- Monitor file sizes and quality
Next Steps
- Folder Structure - Organize your converted assets
- Optimization - Further optimize your assets
Table of Contents