ffmpeg简介

news/2024/11/30 0:34:26/

1.什么是ffmpeg

ffmpeg即使一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

ffmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等; ffmpeg框架提供了多种丰富的插件模块,包含封装和解封装的插件、编码与解码的插件等。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 FFmpeg编码库可以使用GPU加速。
ffmpeg中文文档

2.ffmpeg的模块:

libavformat

用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能

libavcodec

用于各种类型声音/图像编解码,包括目前多媒体领域中绝大多数常用的编解码格式

libavutil

包含一些公共的工具函数

ibswscale

用于视频场景比例缩放、色彩映射转换

libpostproc

用于后期效果处理

libavfilter

一个通用的音频、视频、字幕等滤镜处理框架,可以用其做一些音视频处理,如音视频倍速、水平翻转、裁剪、加方框、叠加文字等功能

libavdevice

可以读取电脑(或其他设备上)的多媒体设备的数据,或者输出到指定的多媒体设备上

libswresample

提供了高级别的音频重采样API

3.常用命令模板

3.1.转格式

转换视频格式,该命令将 MP4 格式的视频转换为 AVI 格式。

ffmpeg -i input.mp4 output.avi

转换音频格式,该命令将 MP3 格式的音频转换为 Ogg 格式。

ffmpeg -i input.mp3 output.ogg

提取视频中的音频,该命令从输入视频中提取音频并将其保存为 AAC 格式。

ffmpeg -i input.mp4 -vn -acodec copy output.aac

转换视频为 GIF,该命令将输入视频转换为 GIF 动画,先生成调色板,再将其应用于视频。

ffmpeg -i input.mp4 -vf "scale=320:-1:flags=lanczos,palettegen" -y palette.pngffmpeg -i input.mp4 -i palette.png -filter_complex "scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" -y output.gif

提取视频帧,该命令从输入视频中提取每秒钟的一帧,并将这些帧保存为 PNG 格式的图像文件。

ffmpeg -i input.mp4 -r 1 -f image2 output-%03d.png

提取某一帧,该命令从输入视频中提取第30秒的一帧,并将这些帧保存为 PNG 格式的图像文件。

ffmpeg -i input.mp4 -ss 00:00:30 -frames:v 1 output-30.png

3.2.修改视频

调整视频大小,该命令将输入视频的分辨率调整为 640x360 并将输出保存为 MP4 格式。

ffmpeg -i input.mp4 -vf scale=640:360 output.mp4

添加水印,该命令在输入视频的左上角添加一个水印,并将输出保存为 MP4 格式。

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

调整音频音量,该命令将输入音频的音量调整为原来的 2 倍,并将输出保存为 MP3 格式。

ffmpeg -i input.mp3 -af "volume=2" output.mp3

压缩视频,该命令将输入视频压缩为分辨率为 640x? 的视频,并使用 H.264 编码器进行编码。压缩质量由 CRF 参数控制,值越小压缩质量越高。Preset 参数控制编码速度,值越小编码速度越快,但压缩质量可能会降低。

ffmpeg -i input.mp4 -vf "scale=640:-1" -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4

添加字幕,该命令将输入视频与字幕文件结合,将字幕文件编码为 mov_text 格式,将输出保存为 MP4 格式。

ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4

旋转视频,该命令将输入视频逆时针旋转 90 度,并将输出保存为 MP4 格式。

ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4

修改视频的帧率,该命令将输入视频的帧率修改为 30 帧每秒,然后使用 H.264 编码器进行编码。

ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4

3.3.拼接剪辑

裁剪视频,该命令从输入视频的第 10 秒开始裁剪,裁剪时长为 20 秒,然后将裁剪后的视频保存为 MP4 格式。

ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4

合并多个视频文件,该命令将两个 MP4 格式的视频文件合并为一个文件,并将其保存为 MP4 格式。

ffmpeg -i "concat:input1.mp4|input2.mp4" -c copy output.mp4

分离视频的音频和视频流,该命令将输入视频的音频流和视频流分别保存为 MP3 和 MP4 格式的文件。

ffmpeg -i input.mp4 -vn audio.mp3ffmpeg -i input.mp4 -an -vcodec copy video.mp4

合并音频和视频

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4

如果视频中已经包含了音频,这个时候还可以替换视频中的音频,使用下面命令行。

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental-map 0:v:0 -map 1:a:0 output.mp4

拼接音频文件,该命令将两个 MP3 格式的音频文件拼接为一个文件,并将其保存为 MP3 格式。

ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3

裁剪音频,该命令从输入音频的第 30 秒开始裁剪,裁剪时长为 2 分钟,然后将裁剪后的音频保存为 MP3 格式。

ffmpeg -i input.mp3 -ss 00:00:30 -t 00:02:00 -acodec copy output.mp3

http://www.ppmy.cn/news/1051449.html

相关文章

Android 显示、隐藏状态栏和导航栏

控制状态栏显示&#xff0c;Activity的主题中配置全屏属性 <item name"android:windowFullscreen">true</item> 控制状态栏显示&#xff0c;在setContentView之前设置全屏的flag 复制代码 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULL…

mac苹果电脑怎么运行Windows软件?怎么安装Win虚拟机?

近年来&#xff0c;苹果电脑的用户群体不断扩大&#xff0c;许多用户对于苹果电脑是否可以运行Windows软件产生了疑问。苹果电脑和Windows操作系统有着明显的区别&#xff0c;是否能够在苹果电脑上运行Windows软件。下面我们就来看苹果电脑可以运行Windows软件吗&#xff0c;苹…

二级MySQL(四)——数据表的增删改查

首先认识数据类型&#xff1a; VERCHAR&#xff08;n&#xff09;最长长度为n的&#xff0c;可变长度的&#xff0c;字符串类型 CHAR&#xff08;n&#xff09;固定长度的字符串类型 TIME&#xff1a;时间内类型 DTAE&#xff1a;日期类型 INT&#xff1a;普通大小的整数 …

html流光按钮

出处bilibili猫咪爱狗 <!DOCTYPE html> <html><head><style>body {/*内容居中&#xff0c;背景色*/height: 100vh;display: flex;justify-content: center; align-items: center;background-color: #000;}a { /*水平垂直居中*/position: re…

EasyExcel 导出报空指针NullPointerException

java.lang.NullPointerException: null at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) 这是jdk缺少字体库问题 在官网也给出解决答案&#xff1a; 1.安装少了字体库…

第5天----单词替换(C++replace()函数)

当一句话中出现错误的单词时&#xff0c;你是否想快速将它替换为你想要的&#xff0c;接下来的这篇文章&#xff0c;将带你了解什么是单词替换。 一、基本知识&#xff1a; 1. string::replace()函数 C <string>库中的replace()函数是用于替换字符串中的特定字符或子字…

Vue3.X 路由与导航栏、侧边栏(四)

我们接着上一节的 Vue3.x 生命周期&#xff08;三&#xff09; 的说明&#xff0c;我们这一节讲解了项目中路由的配置与导航栏、侧边栏的关系。 一、路由配置 vue项目中路由配置有一个固有文件夹&#xff0c;可以配置路由&#xff0c;这样的优点使项目更加清晰明了。 如图&a…

【面试】项目经理面试题

文章目录 一、项目管理面试中通常会问到的问题1.项目管理软件工具知识2.做项目计划的技能3.人员管理技能4.沟通技巧5.方法论知识 二、问面试官的问题三. 面试系列推荐 一、项目管理面试中通常会问到的问题 1.项目管理软件工具知识 问题 1: 工期和工作量之间的差异是什么? 答案…