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

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

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

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

安装FFmpeg

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

macOS

brew install ffmpeg

Ubuntu/Debian

sudo apt update
sudo apt install ffmpeg

Windows

  1. 访问FFmpeg官网下载预编译版本
    image
    image
  2. 解压并将bin目录添加到系统PATH
    image

从源码编译(最新功能)

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

posted @ 2025-12-03 20:06  TokE648  阅读(38)  评论(0)    收藏  举报