encoding-presets.json 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. {
  2. "schema": "claude-mods.ffmpeg-ops.encoding-presets/v1",
  3. "updated": "2026-06-12",
  4. "note": "Recipe data the agent queries instead of re-deriving. Args are ffmpeg argv fragments; {input}/{output} are placeholders. Social specs drift - check the 'updated' stamp and the platform's current docs before trusting a target older than ~6 months.",
  5. "delivery": {
  6. "web_h264": {
  7. "use": "Default web/share delivery - universal playback",
  8. "args": "-c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart",
  9. "container": "mp4"
  10. },
  11. "web_h264_small": {
  12. "use": "Size-sensitive H.264 (email, chat upload caps)",
  13. "args": "-c:v libx264 -crf 24 -preset slow -pix_fmt yuv420p -vf scale=-2:720 -c:a aac -b:a 128k -movflags +faststart",
  14. "container": "mp4"
  15. },
  16. "hevc_storage": {
  17. "use": "Personal library/storage - ~40% smaller, modern devices",
  18. "args": "-c:v libx265 -crf 24 -preset slow -tag:v hvc1 -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart",
  19. "container": "mp4"
  20. },
  21. "av1_web": {
  22. "use": "Best compression for web-first targets; encode cost highest",
  23. "args": "-c:v libsvtav1 -crf 32 -preset 6 -pix_fmt yuv420p10le -c:a libopus -b:a 128k",
  24. "container": "webm"
  25. },
  26. "archive_ffv1": {
  27. "use": "Lossless preservation master (archival standard)",
  28. "args": "-c:v ffv1 -level 3 -g 1 -slicecrc 1 -c:a flac",
  29. "container": "mkv"
  30. },
  31. "normalize_source": {
  32. "use": "Fix problem sources (HEVC/VFR/Zoom/Loom) before editing",
  33. "args": "-c:v libx264 -crf 18 -preset fast -pix_fmt yuv420p -fps_mode cfr -r 30 -c:a aac -b:a 192k -ar 48000",
  34. "container": "mp4"
  35. }
  36. },
  37. "audio": {
  38. "podcast_opus": {
  39. "use": "Voice distribution - best codec per bit",
  40. "args": "-vn -c:a libopus -b:a 32k -ac 1 -application voip"
  41. },
  42. "music_opus": {
  43. "use": "Music/general audio",
  44. "args": "-vn -c:a libopus -b:a 128k"
  45. },
  46. "stt_prep": {
  47. "use": "Whisper-family input - 16 kHz mono PCM",
  48. "args": "-vn -ac 1 -ar 16000 -c:a pcm_s16le",
  49. "container": "wav"
  50. },
  51. "loudness_targets_lufs": {
  52. "streaming_platforms": -14,
  53. "podcast": -16,
  54. "ebu_r128_broadcast": -23
  55. }
  56. },
  57. "social": {
  58. "_note": "Specs as of the 'updated' stamp. aspect = canvas; fit landscape sources with the blurred-pad pattern in SKILL.md.",
  59. "youtube_standard": {
  60. "aspect": "16:9", "resolution": "1920x1080", "fps_max": 60,
  61. "args": "-c:v libx264 -crf 19 -preset slow -pix_fmt yuv420p -c:a aac -b:a 192k -ar 48000 -movflags +faststart"
  62. },
  63. "youtube_shorts": {
  64. "aspect": "9:16", "resolution": "1080x1920", "duration_max_s": 180,
  65. "args": "-c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart"
  66. },
  67. "instagram_reel": {
  68. "aspect": "9:16", "resolution": "1080x1920", "duration_max_s": 900, "fps_max": 60,
  69. "args": "-c:v libx264 -crf 21 -preset slow -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart"
  70. },
  71. "tiktok": {
  72. "aspect": "9:16", "resolution": "1080x1920", "duration_max_s": 600,
  73. "args": "-c:v libx264 -crf 21 -preset slow -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart"
  74. },
  75. "twitter_x": {
  76. "aspect": "16:9 or 1:1", "resolution": "1920x1080", "duration_max_s": 140, "size_max_mb": 512,
  77. "args": "-c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart"
  78. }
  79. },
  80. "gif": {
  81. "standard": {
  82. "use": "README/PR demo GIF - palettegen quality at sane size",
  83. "filter": "fps=12,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=128[p];[s1][p]paletteuse=dither=bayer:bayer_scale=4"
  84. }
  85. }
  86. }