关于音频处理工具FFmpeg | 笔记备注

前言
因为突然有人来问我,OBS录频时为什么画面会出现漂移(60/120帧),同时画面卡顿的问题。
通过检查,发现录频时游戏画面内容为120帧,在检查OBS录频内容帧率时没有内容显示,因此通过ffmpeg工具来辅助检查视频文件帧率。(不过录频画面漂移的问题还是没有解决就是了,我严重怀疑是电脑显卡渲染的问题)

引言
如果你曾经需要转换视频格式、提取音频、剪辑片段或处理多媒体文件,那么FFmpeg很可能就是你一直在寻找的工具。这个开源、跨平台的命令行工具集被誉为“音视频处理的瑞士军刀”,是每个开发者和内容创作者都应该掌握的利器。

什么是FFmpeg?
FFmpeg是一个完整的、跨平台的解决方案,用于录制、转换和流式传输音频和视频。它包含了libavcodec——一个领先的音视频编解码库,以及libavformat——一个多媒体容器格式的复用和解复用库。

安装FFmpeg

官方链接:https://ffmpeg.org/
关于音频处理工具FFmpeg | 笔记备注

macOS

brew install ffmpeg 

Ubuntu/Debian

sudo apt update sudo apt install ffmpeg 

Windows

  1. 访问FFmpeg官网下载预编译版本
    关于音频处理工具FFmpeg | 笔记备注
    关于音频处理工具FFmpeg | 笔记备注
  2. 解压并将bin目录添加到系统PATH
    关于音频处理工具FFmpeg | 笔记备注

从源码编译(最新功能)

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-libvpx make sudo make install 

常用命令

常用参数说明

  • -i:输入文件
  • -c:v:视频编码器
  • -c:a:音频编码器
  • -vf:视频过滤器
  • -af:音频过滤器
  • -ss:开始时间
  • -t:持续时间
  • -to:结束时间
  • -b:v:视频比特率
  • -b:a:音频比特率
  • -r:帧率
  • -s:分辨率

查看文件信息

ffmpeg -i input.mp4 

实用技巧

  1. 保持原质量
ffmpeg -i input.mp4 -c copy output.mkv 
  1. 批量处理(bash脚本示例):
for file in *.mov; do     ffmpeg -i "$file" "${file%.mov}.mp4" done 
  1. 添加水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4 

注意事项

  • FFmpeg 命令顺序很重要
  • 先指定输入文件,再设置参数,最后是输出文件
  • 使用 -c copy 可以避免重新编码,加快处理速度
  • 复杂操作可能需要使用滤镜链(filter_complex)

核心组件

  • ffmpeg:主要的多媒体处理工具
  • ffplay:简单的媒体播放器
  • ffprobe:媒体文件分析工具
  • 多个编码/解码库

FFmpeg能做什么?

1. 格式转换(转码)

# 将MP4转换为AVI ffmpeg -i input.mp4 output.avi  # 将视频转换为H.264编码的MP4 ffmpeg -i input.mov -c:v libx264 output.mp4  # 批量转换所有MKV文件为MP4 for f in *.mkv; do ffmpeg -i "$f" "${f%.mkv}.mp4"; done 

2. 提取音频

# 从视频中提取音频为MP3 ffmpeg -i video.mp4 -q:a 0 -map a audio.mp3  # 提取高质量音频 ffmpeg -i input.mp4 -vn -acodec copy output.aac 

3. 视频剪辑与合并

# 剪辑视频片段(从第10秒开始,持续15秒) ffmpeg -i input.mp4 -ss 00:00:10 -t 15 -c copy clip.mp4  # 合并多个视频 echo "file 'part1.mp4'" > list.txt echo "file 'part2.mp4'" >> list.txt ffmpeg -f concat -i list.txt -c copy output.mp4 

4. 调整视频参数

# 调整分辨率 ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4  # 调整比特率 ffmpeg -i input.mp4 -b:v 1M output.mp4  # 调整帧率 ffmpeg -i input.mp4 -r 30 output.mp4 

5. 添加水印和字幕

# 添加图片水印 ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4  # 添加文字水印 ffmpeg -i input.mp4 -vf "drawtext=text='Your Text':x=10:y=10:fontsize=24:fontcolor=white" output.mp4  # 添加字幕 ffmpeg -i video.mp4 -vf "subtitles=subtitle.srt" output.mp4 

6. 屏幕录制

# Linux屏幕录制 ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4  # macOS屏幕录制 ffmpeg -f avfoundation -i "1" output.mov  # Windows屏幕录制(需要安装额外组件) 

7. 直播推流

# 推流到RTMP服务器 ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/streamkey  # 从摄像头直播 ffmpeg -f avfoundation -i "0" -f flv rtmp://server/live/streamkey 

8. 创建GIF动图

# 从视频创建高质量GIF ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif  # 从视频片段创建GIF ffmpeg -ss 00:00:05 -t 3 -i input.mp4 -vf "fps=15,scale=400:-1:flags=lanczos" output.gif 

9. 视频压缩

# 高质量压缩 ffmpeg -i input.mp4 -vcodec libx264 -crf 28 output.mp4  # 极速压缩 ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast output.mp4 

10. 音频处理

# 合并音频和视频 ffmpeg -i video.mp4 -i audio.mp3 -c copy output.mp4  # 调整音频音量 ffmpeg -i input.mp3 -af "volume=1.5" output.mp3  # 音频格式转换 ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3 

实用技巧与高级用法

1. 硬件加速

# NVIDIA GPU加速(需要安装NVIDIA驱动和CUDA) ffmpeg -hwaccel cuda -i input.mp4 output.mp4  # Intel QuickSync加速 ffmpeg -hwaccel qsv -i input.mp4 output.mp4 

2. 批量处理脚本

#!/bin/bash # 批量压缩视频 for f in *.mp4; do     ffmpeg -i "$f" -vcodec libx264 -crf 28 "compressed_${f}" done 

3. 视频分析

# 使用ffprobe分析视频信息 ffprobe -v error -show_format -show_streams input.mp4  # 显示关键帧位置 ffprobe -select_streams v -show_frames -show_entries frame=pict_type input.mp4 

4. 视频滤镜链

# 多个滤镜组合使用 ffmpeg -i input.mp4 -vf "eq=brightness=0.05:contrast=1.1,unsharp=5:5:1.0:5:5:0.0" output.mp4 

最佳实践

  1. 备份原始文件:FFmpeg操作通常不可逆
  2. 先测试后批量:在处理大量文件前,先测试单个文件
  3. 使用合适的编码器:根据需求选择编码器(libx264用于兼容性,libvpx用于WebM)
  4. 关注质量与大小平衡:CRF值越低质量越好但文件越大(建议18-28)
  5. 利用硬件加速:大幅提升处理速度

常见问题解决

1. 编码器不支持

# 查看支持的编码器 ffmpeg -codecs  # 安装额外编码器 # H.265/HEVC支持 sudo apt install libx265-dev 

2. 内存不足

# 使用流式处理 ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast -tune fastdecode output.mp4 

3. 时间戳问题

# 修复时间戳 ffmpeg -i input.mp4 -vsync 2 output.mp4 

资源推荐

  1. 官方文档https://ffmpeg.org/documentation.html
  2. FFmpeg维基https://trac.ffmpeg.org/wiki
  3. 常用命令备忘单https://gist.github.com/protrolium/...
  4. 在线测试工具:无需安装即可体验基础功能

结语

FFmpeg的强大之处不仅在于其功能丰富,更在于它的灵活性和可编程性。虽然命令行界面可能让初学者望而生畏,但一旦掌握基础语法,你会发现它是一个效率倍增器。无论是处理个人媒体库,还是构建专业的音视频处理流水线,FFmpeg都能提供稳定可靠的解决方案。

记住,FFmpeg的学习是一个渐进的过程。从简单的格式转换开始,逐步尝试更复杂的功能,很快你就能成为多媒体处理的高手。现在,打开终端,开始你的FFmpeg之旅吧!


提示:本文只是FFmpeg功能的冰山一角。FFmpeg拥有数百个参数和选项,建议在实践中逐步探索。遇到问题时,使用ffmpeg -h查看帮助,或者查阅官方文档获取最新信息。

如果你有特定的使用场景或遇到技术问题,欢迎在评论区交流讨论!

FFmpeg 功能非常强大,这些只是基础用法。对于更复杂的需求,可以参考官方文档或社区教程。

发表评论

您必须 [ 登录 ] 才能发表留言!

相关文章