FFmpeg 详解

发布于:2025-07-06 ⋅ 阅读:(14) ⋅ 点赞:(0)

FFmpeg 详解

FFmpeg 是一个强大的跨平台多媒体处理工具集,可以用于录制、转换、编辑和流式传输音频和视频内容。以下是 FFmpeg 的全面解析:

一、FFmpeg 核心组件

  1. ffmpeg - 主要的多媒体转换工具
  2. ffplay - 简单的媒体播放器
  3. ffprobe - 媒体文件分析工具
  4. libavcodec - 编解码器库
  5. libavformat - 多媒体容器格式库
  6. libavutil - 实用工具库
  7. libswscale - 图像缩放和色彩空间转换库
  8. libswresample - 音频重采样库

二、基本命令结构

ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ...

三、常用功能详解

1. 视频转换

# 转换视频格式
ffmpeg -i input.mp4 output.avi

# 指定编码器
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4

2. 音频处理

# 提取音频
ffmpeg -i video.mp4 -vn -c:a copy output.aac

# 转换音频格式
ffmpeg -i input.wav -c:a libmp3lame output.mp3

# 调整音频质量
ffmpeg -i input.mp3 -b:a 192k output.mp3

3. 视频裁剪与剪辑

# 裁剪视频片段
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:20 -c copy output.mp4

# 裁剪视频尺寸
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4

4. 视频合并

# 创建合并列表文件
echo "file 'part1.mp4'" > list.txt
echo "file 'part2.mp4'" >> list.txt

# 执行合并
ffmpeg -f concat -i list.txt -c copy output.mp4

四、高级功能

1. 视频滤镜

# 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4

# 调整亮度/对比度
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.5" output.mp4

# 添加文字
ffmpeg -i input.mp4 -vf "drawtext=text='Sample Text':x=10:y=10:fontsize=24:fontcolor=white" output.mp4

2. 视频压缩

# CRF压缩 (18-28是常用范围,值越小质量越高)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium output.mp4

# 2-pass编码 (更精确的码率控制)
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -f mp4 /dev/null && \
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 output.mp4

3. 屏幕录制

# Linux屏幕录制
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -c:v libx264 output.mp4

# Windows屏幕录制
ffmpeg -f gdigrab -i desktop -c:v libx264 output.mp4

五、流媒体处理

1. RTMP推流

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -c:a aac -f flv rtmp://server/live/streamkey

2. HLS切片

ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8

六、硬件加速

1. NVIDIA硬件加速

ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4

2. Intel QSV加速

ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -c:v h264_qsv output.mp4

七、FFmpeg API编程

FFmpeg 提供了强大的编程接口,可以用 C/C++ 进行开发:

#include <libavformat/avformat.h>

int main() {
    AVFormatContext *fmt_ctx = NULL;
    avformat_open_input(&fmt_ctx, "input.mp4", NULL, NULL);
    avformat_find_stream_info(fmt_ctx, NULL);
    
    // 处理媒体流...
    
    avformat_close_input(&fmt_ctx);
    return 0;
}

八、FFmpeg 常见问题解决

  1. 编解码器不支持:安装额外编解码器或重新编译FFmpeg
  2. 时间戳问题:使用 -fflags +genpts 重新生成时间戳
  3. 音视频不同步:尝试 -async 1 参数
  4. 内存不足:使用 -threads 限制线程数或分片处理

九、FFmpeg 性能优化

  1. 选择合适的 -preset (ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow)
  2. 使用多线程 -threads
  3. 合理设置 GOP 大小 -g
  4. 使用硬件加速

FFmpeg 的功能远不止于此,它几乎可以处理所有你能想到的多媒体操作。掌握 FFmpeg 可以让你在多媒体处理领域游刃有余。


网站公告

今日签到

点亮在社区的每一天
去签到