Post-Processing Basics
yt-dlp provides extensive post-processing capabilities to convert, enhance, and modify downloaded content automatically.
Basic Post-Processing
Audio Extraction and Conversion
Extract audio to MP3
yt-dlp -x --audio-format mp3 "VIDEO_URL"
Extract audio with quality setting
yt-dlp -x --audio-format mp3 --audio-quality 0 "VIDEO_URL"
Convert to different audio formats
yt-dlp -x --audio-format aac "VIDEO_URL"
yt-dlp -x --audio-format flac "VIDEO_URL"
yt-dlp -x --audio-format wav "VIDEO_URL"
Video Format Conversion
Convert to MP4
yt-dlp --remux-video mp4 "VIDEO_URL"
Merge video and audio to specific format
yt-dlp -f "bestvideo+bestaudio" --merge-output-format mp4 "VIDEO_URL"
Convert to different video formats
yt-dlp --remux-video mkv "VIDEO_URL"
yt-dlp --remux-video avi "VIDEO_URL"
Metadata Processing
Adding Metadata
Add basic metadata
yt-dlp --add-metadata "VIDEO_URL"
Add metadata to audio files
yt-dlp -x --add-metadata "VIDEO_URL"
Write metadata to external file
yt-dlp --write-info-json "VIDEO_URL"
Thumbnail Processing
Embed thumbnail in video
yt-dlp --embed-thumbnail "VIDEO_URL"
Embed thumbnail in audio
yt-dlp -x --embed-thumbnail "VIDEO_URL"
Write thumbnail as separate file
yt-dlp --write-thumbnail "VIDEO_URL"
Convert thumbnail format
yt-dlp --convert-thumbnails jpg "VIDEO_URL"
Subtitle Processing
Subtitle Embedding
Embed subtitles in video
yt-dlp --embed-subs "VIDEO_URL"
Embed specific language subtitles
yt-dlp --embed-subs --sub-lang en "VIDEO_URL"
Embed all available subtitles
yt-dlp --embed-subs --sub-lang all "VIDEO_URL"
Subtitle Conversion
Convert subtitle format
yt-dlp --convert-subs srt "VIDEO_URL"
Convert to multiple formats
yt-dlp --convert-subs "srt,vtt,ass" "VIDEO_URL"
Write and convert subtitles
yt-dlp --write-sub --convert-subs srt "VIDEO_URL"
Advanced FFmpeg Processing
Custom FFmpeg Arguments
Apply video filters
yt-dlp --postprocessor-args "ffmpeg:-vf scale=1280:720" "VIDEO_URL"
Audio processing
yt-dlp --postprocessor-args "ffmpeg:-af loudnorm" "VIDEO_URL"
Multiple filters
yt-dlp --postprocessor-args "ffmpeg:-vf scale=1280:720,fps=30 -af loudnorm" "VIDEO_URL"
Video Processing Examples
Resize video
yt-dlp --postprocessor-args "ffmpeg:-vf scale=1920:1080" "VIDEO_URL"
Change frame rate
yt-dlp --postprocessor-args "ffmpeg:-vf fps=30" "VIDEO_URL"
Apply video filters
yt-dlp --postprocessor-args "ffmpeg:-vf brightness=0.1,contrast=1.1" "VIDEO_URL"
Crop video
yt-dlp --postprocessor-args "ffmpeg:-vf crop=1280:720:0:0" "VIDEO_URL"
Audio Processing Examples
Normalize audio
yt-dlp --postprocessor-args "ffmpeg:-af loudnorm" "VIDEO_URL"
Change audio bitrate
yt-dlp --postprocessor-args "ffmpeg:-b:a 192k" "VIDEO_URL"
Apply audio filters
yt-dlp --postprocessor-args "ffmpeg:-af highpass=f=200,lowpass=f=3000" "VIDEO_URL"
Audio fade effects
yt-dlp --postprocessor-args "ffmpeg:-af afade=t=in:d=2,afade=t=out:st=28:d=2" "VIDEO_URL"
File Organization Post-Processing
Custom Execution Scripts
Execute script after download
yt-dlp --exec "custom_script.sh {}" "VIDEO_URL"
Execute before download
yt-dlp --exec-before-download "prepare_script.sh {}" "VIDEO_URL"
Multiple execution points
yt-dlp --exec-before-download "pre_script.sh {}" --exec "post_script.sh {}" "VIDEO_URL"
File Movement and Organization
Move files after processing
yt-dlp --exec "mv {} /final/destination/" "VIDEO_URL"
Organize by date
yt-dlp --exec "mkdir -p $(date +%Y/%m) && mv {} $(date +%Y/%m)/" "VIDEO_URL"
Custom organization script
yt-dlp --exec "organize_files.py {}" "VIDEO_URL"
Platform-Specific Post-Processing
YouTube-Specific
Process YouTube videos with chapters
yt-dlp --add-metadata --embed-chapters "YOUTUBE_URL"
Extract YouTube comments
yt-dlp --write-comments --embed-comments "YOUTUBE_URL"
YouTube Music processing
yt-dlp -x --add-metadata --embed-thumbnail --parse-metadata "title:%(artist)s - %(title)s" "YOUTUBE_MUSIC_URL"
Twitch-Specific
Process Twitch VODs with chat
yt-dlp --write-comments "TWITCH_VOD_URL"
Twitch highlights extraction
yt-dlp --download-sections "*highlights*" "TWITCH_URL"
Batch Post-Processing
Processing Multiple Files
Batch processing with same options
yt-dlp -x --add-metadata --batch-file urls.txt
Different processing per URL
yt-dlp --batch-file batch_config.txt
Post-Processing Archives
Process only new downloads
yt-dlp --download-archive processed.txt --add-metadata "VIDEO_URL"
Reprocess existing files
yt-dlp --force-overwrites --remux-video mp4 "VIDEO_URL"
Quality Control Post-Processing
Video Quality Enhancement
Upscale video (requires appropriate ffmpeg build)
yt-dlp --postprocessor-args "ffmpeg:-vf scale=1920:1080:flags=lanczos" "VIDEO_URL"
Deinterlace video
yt-dlp --postprocessor-args "ffmpeg:-vf yadif" "VIDEO_URL"
Stabilize video
yt-dlp --postprocessor-args "ffmpeg:-vf deshake" "VIDEO_URL"
Audio Quality Enhancement
Audio normalization
yt-dlp --postprocessor-args "ffmpeg:-af loudnorm=I=-23:LRA=7:TP=-2" "VIDEO_URL"
Noise reduction
yt-dlp --postprocessor-args "ffmpeg:-af highpass=f=200" "VIDEO_URL"
Dynamic range compression
yt-dlp --postprocessor-args "ffmpeg:-af compand" "VIDEO_URL"
Custom Post-Processors
Writing Custom Post-Processors
# Example custom post-processor
from yt_dlp.postprocessor import PostProcessor
class CustomPostProcessor(PostProcessor):
def run(self, info):
filepath = info['filepath']
# Custom processing logic here
return [], info
# Usage in configuration
--use-postprocessor CustomPostProcessor
Plugin-Based Post-Processing
Use external post-processor plugins
yt-dlp --use-postprocessor ExternalPlugin "VIDEO_URL"
Plugin with arguments
yt-dlp --use-postprocessor "ExternalPlugin:arg1=value1,arg2=value2" "VIDEO_URL"
Error Handling in Post-Processing
Handling Post-Processing Failures
Continue on post-processing errors
yt-dlp --ignore-errors --add-metadata "VIDEO_URL"
Skip post-processing if it fails
yt-dlp --no-post-overwrites --remux-video mp4 "VIDEO_URL"
Verbose post-processing debugging
yt-dlp --verbose --add-metadata "VIDEO_URL"
Recovery and Retry
Retry post-processing
yt-dlp --force-overwrites --add-metadata "VIDEO_URL"
Post-process existing files
yt-dlp --skip-download --add-metadata "VIDEO_URL"
Performance Optimization
Parallel Post-Processing
Process multiple files simultaneously
parallel -j 4 "yt-dlp --add-metadata {}" ::: url1 url2 url3 url4
Batch processing with GNU parallel
yt-dlp --batch-file urls.txt --exec "echo {} >> completed.txt"
Resource Management
Limit FFmpeg threads
yt-dlp --postprocessor-args "ffmpeg:-threads 2" "VIDEO_URL"
Memory-efficient processing
yt-dlp --postprocessor-args "ffmpeg:-preset ultrafast" "VIDEO_URL"
Configuration Examples
Audio-Focused Configuration
# Configuration for audio extraction
--extract-audio
--audio-format mp3
--audio-quality 0
--add-metadata
--embed-thumbnail
Video Archive Configuration
# Configuration for video archiving
--add-metadata
--embed-subs
--embed-thumbnail
--write-info-json
--write-description
--write-comments
Streaming-Optimized Configuration
# Configuration for streaming-friendly output
--merge-output-format mp4
--postprocessor-args "ffmpeg:-movflags +faststart"
--embed-subs
--embed-thumbnail
Troubleshooting Post-Processing
Common Issues
Debug post-processing issues
yt-dlp --verbose --debug --add-metadata "VIDEO_URL"
Check FFmpeg installation
ffmpeg -version
Test post-processing without download
yt-dlp --skip-download --add-metadata "VIDEO_URL"
Format Compatibility
Check supported formats
ffmpeg -formats
Test format conversion
yt-dlp --remux-video mp4 --verbose "VIDEO_URL"
Force format even if incompatible
yt-dlp --force-overwrites --merge-output-format mp4 "VIDEO_URL"
Best Practices
- Test First: Try post-processing on single files before batch operations
- Use Appropriate Formats: Choose formats compatible with your use case
- Monitor Quality: Check output quality after processing
- Handle Errors: Use error handling options for batch processing
- Backup Originals: Keep original files when experimenting
- Optimize Performance: Use appropriate FFmpeg presets for speed/quality balance
- Document Settings: Save working configurations for reuse
- Update Tools: Keep FFmpeg and yt-dlp updated for best compatibility
Post-processing in yt-dlp provides powerful capabilities for automatically transforming downloaded content to meet specific requirements, from simple format conversion to complex audio/video enhancement workflows.