mcpField
M
media-processing

media-processing

github.com/samhvw8创意与媒体1179 次安装46 周前更新
代码仓库

关于 media-processing

使用 FFmpeg 和 ImageMagick 处理视频、音频与图像的命令行技能指南,涵盖转换、编辑、优化、流媒体、批处理及媒体检查工作流。

主要功能

  1. 01使用 FFmpeg 转换视频和音频
  2. 02使用 ImageMagick 编辑与转换图像
  3. 03生成流媒体清单
  4. 04批量处理媒体文件
  5. 05生成缩略图与提取帧
  6. 06检查媒体属性

适用场景

  1. 01转码视频或提取音频
  2. 02调整尺寸、添加水印或优化图像
  3. 03生成 HLS 播放列表和媒体预览
  4. 04检查媒体格式与流属性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/samhvw8/dot-claude --skill media-processing

安装后在 Claude Code 中输入/media-processing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
ffmpeg-encoding.md
ffmpeg-filters.md
ffmpeg-streaming.md
format-compatibility.md
imagemagick-batch.md
imagemagick-editing.md
scripts/
batch_resize.py
media_convert.py
requirements.txt
video_optimize.py
scripts/tests/
.coverage
requirements.txt
test_batch_resize.py
test_media_convert.py
test_video_optimize.py

详细介绍

媒体处理技能

使用 FFmpeg 和 ImageMagick 命令行工具处理视频、音频和图像,执行格式转换、优化、流式传输和操作等任务。

何时使用此技能

适用于以下情况:

  • 转换媒体格式(视频、音频、图像)
  • 使用编码器(H.264、H.265、VP9、AV1)对视频进行编码
  • 处理图像(调整大小、裁剪、添加效果、水印)
  • 从视频中提取音频
  • 创建流媒体清单(HLS/DASH)
  • 生成缩略图和预览
  • 批量处理媒体文件
  • 优化文件大小和质量
  • 应用滤镜和效果
  • 创建合成图像或视频

工具选择指南

FFmpeg:视频/音频处理

以下情况使用 FFmpeg:

  • 视频编码、转换、转码
  • 音频提取、转换、混音
  • 实时流媒体(RTMP、HLS、DASH)
  • 视频滤镜(缩放、裁剪、旋转、叠加)
  • 硬件加速编码
  • 媒体文件检查(ffprobe)
  • 提取帧、拼接文件
  • 选择和优化编码器
ImageMagick:图像处理

以下情况使用 ImageMagick:

  • 图像格式转换(PNG、JPEG、WebP、GIF)
  • 调整大小、裁剪、变换
  • 批量图像处理(mogrify)
  • 视觉效果(模糊、锐化、棕褐色调)
  • 文字叠加和水印
  • 图像合成和拼贴
  • 色彩调整、滤镜
  • 生成缩略图
决策矩阵
任务工具原因
视频编码FFmpeg原生支持视频编码器
音频提取FFmpeg可直接操作流
图像缩放ImageMagick专为静态图像优化
批量处理图像ImageMagick使用 mogrify 原位编辑
视频缩略图FFmpeg内置帧提取功能
创建 GIFFFmpeg 或 ImageMagick视频源使用 FFmpeg,图像使用 ImageMagick
流媒体FFmpeg支持实时流媒体协议
图像效果ImageMagick提供丰富的滤镜库

安装

macOS
brew install ffmpeg imagemagick
Ubuntu/Debian
sudo apt-get install ffmpeg imagemagick
Windows
# Using winget
winget install ffmpeg
winget install ImageMagick.ImageMagick

# Or download binaries
# FFmpeg: https://ffmpeg.org/download.html
# ImageMagick: https://imagemagick.org/script/download.php
验证安装
ffmpeg -version
ffprobe -version
magick -version
# or
convert -version

快速入门示例

视频转换
# Convert format (copy streams, fast)
ffmpeg -i input.mkv -c copy output.mp4

# Re-encode with H.264
ffmpeg -i input.avi -c:v libx264 -crf 22 -c:a aac output.mp4

# Resize video to 720p
ffmpeg -i input.mp4 -vf scale=-1:720 -c:a copy output.mp4
提取音频
# Extract audio (no re-encoding)
ffmpeg -i video.mp4 -vn -c:a copy audio.m4a

# Convert to MP3
ffmpeg -i video.mp4 -vn -q:a 0 audio.mp3
图像处理
# Convert format
magick input.png output.jpg

# Resize maintaining aspect ratio
magick input.jpg -resize 800x600 output.jpg

# Create square thumbnail
magick input.jpg -resize 200x200^ -gravity center -extent 200x200 thumb.jpg
批量调整图像大小
# Resize all JPEGs to 800px width
mogrify -resize 800x -quality 85 *.jpg

# Output to separate directory
mogrify -path ./output -resize 800x600 *.jpg
视频缩略图
# Extract frame at 5 seconds
ffmpeg -ss 00:00:05 -i video.mp4 -vframes 1 -vf scale=320:-1 thumb.jpg
HLS 流媒体
# Generate HLS playlist
ffmpeg -i input.mp4 \
  -c:v libx264 -preset fast -crf 22 -g 48 \
  -c:a aac -b:a 128k \
  -f hls -hls_time 6 -hls_playlist_type vod \
  playlist.m3u8
图像水印
# Add watermark to corner
magick input.jpg watermark.png -gravity southeast \
  -geometry +10+10 -composite output.jpg

常见工作流

优化适用于 Web 的视频
# H.264 with good compression
ffmpeg -i input.mp4 \
  -c:v libx264 -preset slow -crf 23 \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output.mp4
创建自适应图像
# Generate multiple sizes
for size in 320 640 1024 1920; do
  magick input.jpg -resize ${size}x -quality 85 "output-${size}w.jpg"
done
提取视频片段
# From 1:30 to 3:00 (re-encode for precision)
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:00 \
  -c:v libx264 -c:a aac output.mp4
批量优化图像
# Convert PNG to optimized JPEG
mogrify -path ./optimized -format jpg -quality 85 -strip *.png
创建视频 GIF
# High quality GIF with palette
ffmpeg -i input.mp4 -vf "fps=15,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
图像模糊效果
# Gaussian blur
magick input.jpg -gaussian-blur 0x8 output.jpg

高级技巧

多遍视频编码
# Pass 1 (analysis)
ffmpeg -y -i input.mkv -c:v libx264 -b:v 2600k -pass 1 -an -f null /dev/null

# Pass 2 (encoding)
ffmpeg -i input.mkv -c:v libx264 -b:v 2600k -pass 2 -c:a aac output.mp4
硬件加速编码
# NVIDIA NVENC
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset fast -crf 22 output.mp4

# Intel QuickSync
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -c:v h264_qsv output.mp4
复杂图像处理流水线
# Resize, crop, border, adjust
magick input.jpg \
  -resize 1000x1000^ \
  -gravity center \
  -crop 1000x1000+0+0 +repage \
  -bordercolor black -border 5x5 \
  -brightness-contrast 5x10 \
  -quality 90 \
  output.jpg
视频滤镜链
# Scale, denoise, watermark
ffmpeg -i video.mp4 -i logo.png \
  -filter_complex "[0:v]scale=1280:720,hqdn3d[v];[v][1:v]overlay=10:10" \
  -c:a copy output.mp4
使用图像创建动画 GIF
# Create with delay
magick -delay 100 -loop 0 frame*.png animated.gif

# Optimize size
magick animated.gif -fuzz 5% -layers Optimize optimized.gif

媒体分析

检查视频属性
# Detailed JSON output
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

# Get resolution
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height \
  -of csv=s=x:p=0 input.mp4
图像信息
# Basic info
identify image.jpg

# Detailed format
identify -verbose image.jpg

# Custom format
identify -format "%f: %wx%h %b\n" image.jpg

性能提示

  1. 使用 CRF 控制质量 - 对视频而言,比使用比特率更好
  2. 尽可能复制流 - 使用 -c copy 避免重新编码
  3. 硬件加速 - GPU 编码速度快 5-10 倍
  4. 选择合适的预设 - 平衡速度与压缩率
  5. 使用 mogrify 批处理 - 原位处理图像
  6. 移除元数据 - 使用 -strip 减小文件大小
  7. 使用渐进式 JPEG - 使用 -interlace Plane 加快网页加载
  8. 限制内存 - 避免处理大型批次时发生崩溃
  9. 先用样本测试 - 批处理前验证设置
  10. 并行处理 - 使用 GNU Parallel 处理多个文件

参考文档

详细指南位于 references/:

  • ffmpeg-encoding.md - 视频/音频编码器、质量优化、硬件加速
  • ffmpeg-streaming.md - HLS/DASH、实时流媒体、自适应比特率
  • ffmpeg-filters.md - 视频/音频滤镜、复杂滤镜图
  • imagemagick-editing.md - 格式转换、效果、变换
  • imagemagick-batch.md - 批量处理、mogrify、并行操作
  • format-compatibility.md - 格式支持、编码器建议

常见参数

FFmpeg Video
  • -c:v - Video codec (libx264, libx265, libvpx-vp9)
  • -crf - Quality (0-51, lower=better, 23=default)
  • -preset - Speed/compression (ultrafast to veryslow)
  • -b:v - Video bitrate (e.g., 2M, 2500k)
  • -vf - Video filters
FFmpeg Audio
  • -c:a - Audio codec (aac, mp3, opus)
  • -b:a - Audio bitrate (e.g., 128k, 192k)
  • -ar - Sample rate (44100, 48000)
ImageMagick Geometry
  • 800x600 - Fit within (maintains aspect)
  • 800x600! - Force exact size
  • 800x600^ - Fill (may crop)
  • 800x - Width only
  • x600 - Height only
  • 50% - Scale percentage

Troubleshooting

FFmpeg "Unknown encoder"

# Check available encoders
ffmpeg -encoders | grep h264

# Install codec libraries
sudo apt-get install libx264-dev libx265-dev

ImageMagick "not authorized"

# Edit policy file
sudo nano /etc/ImageMagick-7/policy.xml
# Change <policy domain="coder" rights="none" pattern="PDF" />
# to <policy domain="coder" rights="read|write" pattern="PDF" />

Memory errors

# Limit memory usage
ffmpeg -threads 4 input.mp4 output.mp4
magick -limit memory 2GB -limit map 4GB input.jpg output.jpg

Resources

评论

支持 Markdown