媒体处理Skill media-processing

该技能专注于使用FFmpeg和ImageMagick命令行工具进行多媒体文件处理,涵盖视频、音频和图像的编码、转换、过滤、流媒体、批量处理等功能。适用于媒体格式转换、视频编码优化、图像处理、自动化媒体工作流等场景。关键词:FFmpeg, ImageMagick, 视频处理, 音频处理, 图像处理, 媒体转换, 编码技术, 流媒体, 批量操作。

DevOps 0 次安装 0 次浏览 更新于 3/17/2026

name: 媒体处理 description: 使用FFmpeg(视频/音频编码、转换、流媒体、过滤、硬件加速)和ImageMagick(图像操作、格式转换、批量处理、效果、合成)处理多媒体文件。在转换媒体格式、使用特定编解码器(H.264、H.265、VP9)编码视频、调整大小/裁剪图像、从视频提取音频、应用滤镜和效果、优化文件大小、创建流媒体清单(HLS/DASH)、生成缩略图、批量处理图像、创建合成图像或实现媒体处理管道时使用。支持100多种格式、硬件加速(NVENC、QSV)和复杂滤镜图。 license: MIT

媒体处理技能

使用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 内置帧提取
GIF创建 FFmpeg或ImageMagick FFmpeg用于视频源,ImageMagick用于图像
流媒体 FFmpeg 直播流媒体协议
图像效果 ImageMagick 丰富的滤镜库

安装

macOS

brew install ffmpeg imagemagick

Ubuntu/Debian

sudo apt-get install ffmpeg imagemagick

Windows

# 使用winget
winget install ffmpeg
winget install ImageMagick.ImageMagick

# 或下载二进制文件
# FFmpeg: https://ffmpeg.org/download.html
# ImageMagick: https://imagemagick.org/script/download.php

验证安装

ffmpeg -version
ffprobe -version
magick -version
# 或
convert -version

快速开始示例

视频转换

# 转换格式(复制流,快速)
ffmpeg -i input.mkv -c copy output.mp4

# 使用H.264重新编码
ffmpeg -i input.avi -c:v libx264 -crf 22 -c:a aac output.mp4

# 调整视频大小到720p
ffmpeg -i input.mp4 -vf scale=-1:720 -c:a copy output.mp4

音频提取

# 提取音频(不重新编码)
ffmpeg -i video.mp4 -vn -c:a copy audio.m4a

# 转换为MP3
ffmpeg -i video.mp4 -vn -q:a 0 audio.mp3

图像处理

# 转换格式
magick input.png output.jpg

# 调整大小保持宽高比
magick input.jpg -resize 800x600 output.jpg

# 创建方形缩略图
magick input.jpg -resize 200x200^ -gravity center -extent 200x200 thumb.jpg

批量图像调整大小

# 将所有JPEG调整到800像素宽度
mogrify -resize 800x -quality 85 *.jpg

# 输出到单独目录
mogrify -path ./output -resize 800x600 *.jpg

视频缩略图

# 在5秒处提取帧
ffmpeg -ss 00:00:05 -i video.mp4 -vframes 1 -vf scale=320:-1 thumb.jpg

HLS流媒体

# 生成HLS播放列表
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

图像水印

# 添加水印到角落
magick input.jpg watermark.png -gravity southeast \
  -geometry +10+10 -composite output.jpg

常见工作流程

优化视频为Web

# 使用H.264良好压缩
ffmpeg -i input.mp4 \
  -c:v libx264 -preset slow -crf 23 \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output.mp4

创建响应式图像

# 生成多个大小
for size in 320 640 1024 1920; do
  magick input.jpg -resize ${size}x -quality 85 "output-${size}w.jpg"
done

提取视频片段

# 从1:30到3:00(重新编码以精确)
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:00 \
  -c:v libx264 -c:a aac output.mp4

批量图像优化

# 将PNG转换为优化JPEG
mogrify -path ./optimized -format jpg -quality 85 -strip *.png

视频GIF创建

# 高质量GIF带调色板
ffmpeg -i input.mp4 -vf "fps=15,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

图像模糊效果

# 高斯模糊
magick input.jpg -gaussian-blur 0x8 output.jpg

高级技术

多通道视频编码

# 通道1(分析)
ffmpeg -y -i input.mkv -c:v libx264 -b:v 2600k -pass 1 -an -f null /dev/null

# 通道2(编码)
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

复杂图像管道

# 调整大小、裁剪、边框、调整
magick input.jpg \
  -resize 1000x1000^ \
  -gravity center \
  -crop 1000x1000+0+0 +repage \
  -bordercolor black -border 5x5 \
  -brightness-contrast 5x10 \
  -quality 90 \
  output.jpg

视频滤镜链

# 缩放、去噪、水印
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

# 使用延迟创建
magick -delay 100 -loop 0 frame*.png animated.gif

# 优化大小
magick animated.gif -fuzz 5% -layers Optimize optimized.gif

媒体分析

检查视频属性

# 详细JSON输出
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

# 获取分辨率
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height \
  -of csv=s=x:p=0 input.mp4

图像信息

# 基本信息
identify image.jpg

# 详细格式
identify -verbose image.jpg

# 自定义格式
identify -format "%f: %wx%h %b
" 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视频

  • -c:v - 视频编解码器(libx264, libx265, libvpx-vp9)
  • -crf - 质量(0-51,越低越好,23=默认)
  • -preset - 速度/压缩(ultrafast到veryslow)
  • -b:v - 视频比特率(如2M, 2500k)
  • -vf - 视频滤镜

FFmpeg音频

  • -c:a - 音频编解码器(aac, mp3, opus)
  • -b:a - 音频比特率(如128k, 192k)
  • -ar - 采样率(44100, 48000)

ImageMagick几何

  • 800x600 - 适应内(保持宽高比)
  • 800x600! - 强制精确大小
  • 800x600^ - 填充(可能裁剪)
  • 800x - 仅宽度
  • x600 - 仅高度
  • 50% - 缩放百分比

故障排除

FFmpeg “未知编码器”

# 检查可用编码器
ffmpeg -encoders | grep h264

# 安装编解码器库
sudo apt-get install libx264-dev libx265-dev

ImageMagick “未授权”

# 编辑策略文件
sudo nano /etc/ImageMagick-7/policy.xml
# 更改<policy domain="coder" rights="none" pattern="PDF" />
# 到<policy domain="coder" rights="read|write" pattern="PDF" />

内存错误

# 限制内存使用
ffmpeg -threads 4 input.mp4 output.mp4
magick -limit memory 2GB -limit map 4GB input.jpg output.jpg

资源