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

前言

因为突然有人来问我,OBS录频时为什么画面会出现漂移(60/120帧),同时画面卡顿的问题。

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

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

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

安装FFmpeg

官方链接:https://ffmpeg.org/

macOS

bash 复制代码
brew install ffmpeg

Ubuntu/Debian

bash 复制代码
sudo apt update
sudo apt install ffmpeg

Windows

  1. 访问FFmpeg官网下载预编译版本

  2. 解压并将bin目录添加到系统PATH

从源码编译(最新功能)

bash 复制代码
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:分辨率

查看文件信息

bash 复制代码
ffmpeg -i input.mp4

实用技巧

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

注意事项

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

核心组件

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

FFmpeg能做什么?

1. 格式转换(转码)

bash 复制代码
# 将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. 提取音频

bash 复制代码
# 从视频中提取音频为MP3
ffmpeg -i video.mp4 -q:a 0 -map a audio.mp3

# 提取高质量音频
ffmpeg -i input.mp4 -vn -acodec copy output.aac

3. 视频剪辑与合并

bash 复制代码
# 剪辑视频片段(从第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. 调整视频参数

bash 复制代码
# 调整分辨率
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. 添加水印和字幕

bash 复制代码
# 添加图片水印
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. 屏幕录制

bash 复制代码
# Linux屏幕录制
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4

# macOS屏幕录制
ffmpeg -f avfoundation -i "1" output.mov

# Windows屏幕录制(需要安装额外组件)

7. 直播推流

bash 复制代码
# 推流到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动图

bash 复制代码
# 从视频创建高质量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. 视频压缩

bash 复制代码
# 高质量压缩
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 output.mp4

# 极速压缩
ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast output.mp4

10. 音频处理

bash 复制代码
# 合并音频和视频
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. 硬件加速

bash 复制代码
# NVIDIA GPU加速(需要安装NVIDIA驱动和CUDA)
ffmpeg -hwaccel cuda -i input.mp4 output.mp4

# Intel QuickSync加速
ffmpeg -hwaccel qsv -i input.mp4 output.mp4

2. 批量处理脚本

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

3. 视频分析

bash 复制代码
# 使用ffprobe分析视频信息
ffprobe -v error -show_format -show_streams input.mp4

# 显示关键帧位置
ffprobe -select_streams v -show_frames -show_entries frame=pict_type input.mp4

4. 视频滤镜链

bash 复制代码
# 多个滤镜组合使用
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. 编码器不支持

bash 复制代码
# 查看支持的编码器
ffmpeg -codecs

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

2. 内存不足

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

3. 时间戳问题

bash 复制代码
# 修复时间戳
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 功能非常强大,这些只是基础用法。对于更复杂的需求,可以参考官方文档或社区教程。

相关推荐
blog.pytool.com10 小时前
LVGL 驱动地址自动变更为32 位的问题
ffmpeg
知南x12 小时前
【物联网视频监控系统----韦东山老师视频总结】(4)流媒体方案的实现之ffmpeg
ffmpeg·音视频
kkoral12 小时前
FFmpeg 零基础入门教程
ffmpeg
小Tomkk2 天前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
aqi003 天前
FFmpeg开发笔记(九十八)基于FFmpeg的跨平台图形用户界面LosslessCut
android·ffmpeg·kotlin·音视频·直播·流媒体
带土13 天前
2. Linux下FFmpeg C++音视频解码+推流开发
linux·c++·ffmpeg
aqi004 天前
FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditor
android·ffmpeg·音视频·直播·流媒体
Sleepless_斑马4 天前
RTMP/RTSP流媒体服务器搭建、ffmpeg推流桌面、vlc拉流
ffmpeg·rtmp·rtsp
炼金术4 天前
SkyPlayer v1.1.0 - 在线视频播放功能更新
android·ffmpeg
喜欢吃豆4 天前
深度解析:FFmpeg 远程流式解复用原理与工程实践
人工智能·架构·ffmpeg·大模型·音视频·多模态