当前位置: 首页 > news >正文

FFmpeg常见命令以及解析

FFmpeg 是一个强大的多媒体处理工具,可以用来处理视频、音频等多种媒体文件。以下是 FFmpeg 的常见命令及其详细解析。

一、基础命令结构

FFmpeg 基本命令格式:

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

二、常见命令分类

1. 视频处理

1.1 视频转码
ffmpeg -i input.mp4 output.avi

解析:将 MP4 文件转换为 AVI 格式

1.2 改变视频码率
ffmpeg -i input.mp4 -b:v 1M output.mp4

解析:设置视频码率为 1Mbps

1.3 改变视频分辨率
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4

解析:将视频分辨率调整为 640x480

1.4 裁剪视频
ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

解析

  • w:裁剪宽度

  • h:裁剪高度

  • x:裁剪起始X坐标

  • y:裁剪起始Y坐标

1.5 截取视频片段
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:20 output.mp4

解析

  • -ss:开始时间(1分30秒)

  • -t:持续时间(20秒)

2. 音频处理

2.1 提取音频
ffmpeg -i input.mp4 -vn -acodec copy output.aac

解析

  • -vn:禁用视频流

  • -acodec copy:复制音频流不重新编码

2.2 转换音频格式
ffmpeg -i input.mp3 output.ogg

解析:将 MP3 转换为 OGG 格式

2.3 调整音频音量
ffmpeg -i input.mp3 -af "volume=0.5" output.mp3

解析:将音量降低为原来的一半

3. 图像处理

3.1 视频截图
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpg

解析

  • -ss:截图时间点

  • -vframes 1:截取1帧

3.2 创建视频缩略图
ffmpeg -i input.mp4 -vf fps=1/60 thumbnail-%03d.jpg

解析:每分钟提取1帧作为缩略图

4. 流媒体处理

4.1 RTMP 推流
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/streamName

解析:将本地视频推送到 RTMP 服务器

4.2 提取 HLS 流
ffmpeg -i http://example.com/stream.m3u8 -c copy output.mp4

解析:下载 HLS 流并保存为 MP4

三、高级命令

1. 视频滤镜

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

解析:在视频(10,10)位置添加水印

1.2 视频旋转
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

解析

  • transpose=1:顺时针旋转90度

  • transpose=2:逆时针旋转90度

1.3 视频加速/减速
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

解析:速度加快2倍(0.5)

2. 音频滤镜

2.1 音频降噪
ffmpeg -i input.mp3 -af "afftdn=nf=-25" output.mp3

解析:使用FFT降噪

2.2 音频淡入淡出
ffmpeg -i input.mp3 -af "afade=t=in:ss=0:d=5,afade=t=out:st=55:d=5" output.mp3

解析

  • 5秒淡入

  • 最后5秒淡出(从55秒开始)

3. 复杂滤镜图

3.1 画中画
ffmpeg -i main.mp4 -i sub.mp4 -filter_complex "[1]scale=iw/4:ih/4 [pip]; [0][pip] overlay=main_w-overlay_w-10:10" output.mp4

解析:将第二个视频缩小并叠加到主视频右上角

四、Android 集成示例

1. 使用 mobile-ffmpeg

// 视频转码示例
fun convertVideo(inputPath: String, outputPath: String) {val cmd = arrayOf("-y","-i", inputPath,"-c:v", "libx264","-preset", "fast","-crf", "22","-c:a", "copy",outputPath)FFmpeg.executeAsync(cmd) { executionId, returnCode ->if (returnCode == RETURN_CODE_SUCCESS) {Log.i("FFmpeg", "转换成功")} else {Log.e("FFmpeg", "转换失败")}}
}

2. 视频压缩示例

fun compressVideo(inputPath: String, outputPath: String) {val cmd = arrayOf("-y","-i", inputPath,"-vcodec", "libx264","-crf", "28",       // 质量参数(18-28,值越大压缩率越高)"-preset", "fast",  // 编码速度与压缩率的平衡"-acodec", "copy",  // 保持原音频outputPath)FFmpeg.execute(cmd)
}

五、常用参数解析

参数说明
-i指定输入文件
-c:v设置视频编解码器
-c:a设置音频编解码器
-b:v设置视频比特率
-b:a设置音频比特率
-r设置帧率
-s设置分辨率
-ss设置开始时间
-t设置持续时间
-vn禁用视频
-an禁用音频
-vf设置视频滤镜
-af设置音频滤镜
-y覆盖输出文件
-preset编码预设(ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow)

六、性能优化建议

  1. 使用硬件加速(如 -hwaccel 参数)

  2. 选择合适的 -preset 值平衡速度和质量

  3. 多线程处理(如 -threads 参数)

  4. 对于移动设备,考虑降低分辨率/帧率

  5. 批量处理时注意内存管理

FFmpeg 功能强大,以上只是常用命令的一部分。实际使用时可以根据具体需求组合各种参数和滤镜来实现复杂的媒体处理功能。

相关文章:

  • 什么真正的云原生开发?如何区别本地开发后部署到云端?
  • vb逆向常用函数
  • 配置外设参数与时钟频率 (PCLK1, PCLK2) 的关系
  • 图书整理--LeetCode
  • Linux操作系统之进程(六):进程的控制(上)
  • 01初始uni-app+tabBar+首页
  • 第八节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 用户管理(下)
  • 【redis】安装与使用
  • Unity 在Scroll View内连续截图并保存本地(把滚动列表内的内容截成一个长图)
  • 自然语言处理【NLP】—— CBOW模型
  • JavaEE->多线程1
  • Vue + Spring Boot 前后端交互实践:正确使用 `Content-Type: application/json` 及参数传递方式
  • SonarQube 25.6 完整指南:部署、使用与 CI/CD 集成
  • 【深度学习】TensorFlow全面指南:从核心概念到工业级应用
  • FPGA基础 -- Verilog语言要素之变量类型
  • JavaSE - Object 类详细讲解
  • C/C++中的位域(Bit-field)是什么?
  • 自然语言处理(NLP)核心技术:从词嵌入到Transformer
  • SSM框架:企业级Java开发利器
  • 【CUDA编程】OptionalCUDAGuard详解
  • b2b电子商务网站调研报告一千字/中央电视台新闻联播
  • 为什么没人做同城购物网站/谷歌浏览器官网
  • 做网站阿里巴巴好还是百度好/推广app平台有哪些
  • 4399电脑版网页链接/厦门seo外包公司
  • 应用制作下载/seo关键词排名优化怎样
  • 建设静态网站工具/网络推广长沙网络推广