返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >FFmpeg视频处理入门教程(新手必看)
  • 598
分享到

FFmpeg视频处理入门教程(新手必看)

2024-04-02 19:04:59 598人浏览 八月长安
摘要

目录一、概念1.1 容器1.2 编码格式1.3 编码器二、FFmpeg 的使用格式三、常用命令行参数四、常见用法4.1 查看文件信息4.2 转换编码格式4.3 转换容器格式4.4 调

FFmpeg 是视频处理最常用的开源软件。

它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。

FFmpeg 本身是一个庞大的项目,包含许多组件和库文件,最常用的是它的命令行工具。本文介绍 FFmpeg 命令行如何处理视频,比桌面视频处理软件更简洁高效。

如果你还没安装,可以根据官方文档 先完成安装。

一、概念

介绍 FFmpeg 用法之前,需要了解一些视频处理的基本概念。

1.1 容器

视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。

常见的容器格式有以下几种。一般来说,视频文件的后缀名反映了它的容器格式。

下面的命令查看 FFmpeg 支持的容器。

$ ffmpeg -fORMats

1.2 编码格式

视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。

常用的视频编码格式如下。

H.262
H.264
H.265

上面的编码格式都是有版权的,但是可以免费使用。此外,还有几种无版权的视频编码格式。

VP8
VP9
AV1

常用的音频编码格式如下。

MP3
AAC

上面所有这些都是有损的编码格式,编码后会损失一些细节,以换取压缩后较小的文件体积。无损的编码格式压缩出来的文件体积较大,这里就不介绍了。

下面的命令可以查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内。

$ ffmpeg -codecs

1.3 编码器

编码器(encoders)是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。

以下是一些 FFmpeg 内置的视频编码器。

  • libx264:最流行的开源 H.264 编码器
  • NVENC:基于 NVIDIA GPU 的 H.264 编码器
  • libx265:开源的 HEVC 编码器
  • libvpx:谷歌的 VP8 和 VP9 编码器
  • libaom:AV1 编码器

音频编码器如下。

  • libfdk-aac
  • aac

下面的命令可以查看 FFmpeg 已安装的编码器。

$ ffmpeg -encoders

二、FFmpeg 的使用格式

FFmpeg 的命令行参数非常多,可以分成五个部分。

$ ffmpeg {1} {2} -i {3} {4} {5}

上面命令中,五个部分的参数依次如下。

  • 全局参数
  • 输入文件参数
  • 输入文件
  • 输出文件参数
  • 输出文件

参数太多的时候,为了便于查看,ffmpeg 命令可以写成多行。

$ ffmpeg \
[全局参数] \
[输入文件参数] \
-i [输入文件] \
[输出文件参数] \
[输出文件]

下面是一个例子。

$ ffmpeg \
-y \ # 全局参数
-c:a libfdk_aac -c:v libx264 \ # 输入文件参数
-i input.mp4 \ # 输入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数
output.webm # 输出文件

上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 Vorbis。

如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子。

$ ffmpeg -i input.avi output.mp4

三、常用命令行参数

FFmpeg 常用的命令行参数如下。

  • -c:指定编码器
  • -c copy:直接复制,不经过重新编码(这样比较快)
  • -c:v:指定视频编码器
  • -c:a:指定音频编码器
  • -i:指定输入文件
  • -an:去除音频流
  • -vn: 去除视频流
  • -preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
  • -y:不经过确认,输出时直接覆盖同名文件。

四、常见用法

下面介绍 FFmpeg 几种常见用法。

4.1 查看文件信息

查看视频文件的元信息,比如编码格式和比特率,可以只使用-i参数。

$ ffmpeg -i input.mp4

上面命令会输出很多冗余信息,加上-hide_banner参数,可以只显示元信息。

$ ffmpeg -i input.mp4 -hide_banner

4.2 转换编码格式

转换编码格式(transcoding)指的是, 将视频文件从一种编码转成另一种编码。比如转成 H.264 编码,一般使用编码器libx264,所以只需指定输出文件的视频编码器即可。

$ ffmpeg -i [input.file] -c:v libx264 output.mp4

下面是转成 H.265 编码的写法。

$ ffmpeg -i [input.file] -c:v libx265 output.mp4

4.3 转换容器格式

转换容器格式(transmuxing)指的是,将视频文件从一种容器转到另一种容器。下面是 mp4 转 webm 的写法。

$ ffmpeg -i input.mp4 -c copy output.webm

上面例子中,只是转一下容器,内部的编码格式不变,所以使用-c copy指定直接拷贝,不经过转码,这样比较快。

4.4 调整码率

调整码率(transrating)指的是,改变编码的比特率,一般用来将视频文件的体积变小。下面的例子指定码率最小为964K,最大为3856K,缓冲区大小为 2000K。

$ ffmpeg \
-i input.mp4 \
-minrate 964K -maxrate 3856K -bufsize 2000K \
output.mp4

4.5 改变分辨率(transsizing)

下面是改变视频分辨率(transsizing)的例子,从 1080p 转为 480p 。

$ ffmpeg \
-i input.mp4 \
-vf scale=480:-1 \
output.mp4

4.6 提取音频

有时,需要从视频里面提取音频(demuxing),可以像下面这样写。

$ ffmpeg \
-i input.mp4 \
-vn -c:a copy \
output.aac

上面例子中,-vn表示去掉视频,-c:a copy表示不改变音频编码,直接拷贝。

4.7 添加音轨

添加音轨(muxing)指的是,将外部音频加入视频,比如添加背景音乐或旁白。

$ ffmpeg \
-i input.aac -i input.mp4 \
output.mp4

上面例子中,有音频和视频两个输入文件,FFmpeg 会将它们合成为一个文件。

4.8 截图

下面的例子是从指定时间开始,连续对1秒钟的视频进行截图。

$ ffmpeg \
-y \
-i input.mp4 \
-ss 00:01:24 -t 00:00:01 \
output_%3D.jpg

如果只需要截一张图,可以指定只截取一帧。

$ ffmpeg \
-ss 01:23:45 \
-i input \
-vframes 1 -q:v 2 \
output.jpg

上面例子中,-vframes 1指定只截取一帧,-q:v 2表示输出的图片质量,一般是1到5之间(1 为质量最高)。

4.9 裁剪

裁剪(cutting)指的是,截取原始视频里面的一个片段,输出为一个新视频。可以指定开始时间(start)和持续时间(duration),也可以指定结束时间(end)。

$ ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
$ ffmpeg -ss [start] -i [input] -to [end] -c copy [output]

下面是实际的例子。

$ ffmpeg -ss 00:01:50 -i [input] -t 10.5 -c copy [output]
$ ffmpeg -ss 2.5 -i [input] -to 10 -c copy [output]

上面例子中,-c copy表示不改变音频和视频的编码格式,直接拷贝,这样会快很多。

4.10 为音频添加封面

有些视频网站只允许上传视频文件。如果要上传音频文件,必须为音频添加封面,将其转为视频,然后上传。

下面命令可以将音频文件,转为带封面的视频文件。

$ ffmpeg \
-loop 1 \
-i cover.jpg -i input.mp3 \
-c:v libx264 -c:a aac -b:a 192k -shortest \
output.mp4

上面命令中,有两个输入文件,一个是封面图片cover.jpg,另一个是音频文件input.mp3。-loop 1参数表示图片无限循环,-shortest参数表示音频文件结束,输出视频就结束。

五、参考链接

FFmpeg libav tutorial

Digital video introduction

FFmpeg encoding and editing course

Making Slideshows w/FFMpeg

The Complete Guide for Using ffmpeg in linux

Adding subtitles to your videos the easy way

到此这篇关于FFmpeg视频处理入门教程(新手必看)的文章就介绍到这了,更多相关FFmpe 入门内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: FFmpeg视频处理入门教程(新手必看)

本文链接: https://lsjlt.com/news/162376.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • FFmpeg视频处理入门教程(新手必看)
    目录一、概念1.1 容器1.2 编码格式1.3 编码器二、FFmpeg 的使用格式三、常用命令行参数四、常见用法4.1 查看文件信息4.2 转换编码格式4.3 转换容器格式4.4 调...
    99+
    2024-04-02
  • Kaggle 新手入门必看,手把手教学
    Add Data 的路径:/kaggle/input git clone 的路径:/kaggle/working 一、Kaggle 账号注册 1.进入官网 Kaggle 点击 Register 进行账...
    99+
    2023-09-16
    python pycharm
  • unity3d新手入门必备教程
       Unity3D入门教程中文版    Unity3D基本操作、    用Unity3D创建简单漫游... 1    基本设置... 1    修改视角控制键为右键... 9    如何取消浏览窗口上的右键菜单... 10    植物效...
    99+
    2023-01-31
    新手入门 教程 unity3d
  • 新手必看Android Studio入门详解
    上篇文章已经说过了Android Studio的安装配置,从这里开始我们就来完成第一个Android项目吧! 如何安装配置还不太熟悉的可以参考这篇文章:Android Studio...
    99+
    2024-04-02
  • ActiveMQ简单入门(新手必看篇)
    一、创建一个简单的Hello World案例首先需要导入activemq-all-5.14.5.jar包,写生产端:package com.ietree.mq.helloworld;import javax.jms.Connection;i...
    99+
    2023-05-31
    activemq 入门 ct
  • 音视频基本概念和FFmpeg的简单入门教程详解
    目录写在前面基本概念容器/文件(Conainer/File):媒体流(Stream):数据帧/数据包(Frame/Packet):编解码器(Codec):复用(mux):解复用(mu...
    99+
    2024-04-02
  • 阿里云ECS服务器入门使用流程(新手必看教程)
    一、阿里云根据个人需要选合适的云服务器,选好cpu、内存、带宽,地域,这四个是主要的。其他可以默认选择。 二、登陆控制台 输入账号密码,进去看到服务界面,新手可能不容易看懂。点击左侧菜单,点击云服务器,显示界面如图: ...
    99+
    2022-06-04
    阿里云ECS服务器入门 ecs云服务器入门
  • Python Pandas 数据处理利器,新手入门必读!
    Pandas 是 Python 中强大的数据处理库,专门用于处理结构化数据(如表格)。它提供了丰富的功能,使数据探索、清洗、转换和建模变得简单。对于数据分析和科学领域的初学者来说,掌握 Pandas 至关重要。 数据结构 Pandas 使...
    99+
    2024-04-02
  • Java编程新手必看:如何快速入门算法和自然语言处理
    对于新手来说,学习编程语言可能会让人感到十分困难。但是,如果你想成为一名成功的程序员,你需要学会一些算法和自然语言处理的技能。在本文中,我将帮助你快速入门这两个领域,并为你提供一些示例代码。 算法入门 算法是编写高效程序的关键。在Java...
    99+
    2023-10-06
    编程算法 load 自然语言处理
  • 大数据处理新手必看:go语言npm教程分享
    大数据处理一直是一个热门话题,随着技术的不断进步,越来越多的编程语言被用于大数据处理中。其中,Go语言因其高效、简洁和易于学习等特点,成为了大数据处理领域中备受欢迎的编程语言之一。而npm则是Go语言中非常重要的一个包管理器,本文将分享一些...
    99+
    2023-07-01
    npm 教程 大数据
  • Python 音视频剪辑快速入门教程
    目录一、引言二、Moviepy 简介三、Moviepy 安装四、音视频的加载和保存五、音视频数据的访问六、音视频变换1、Clip 的 fl 方法2、Clip 的 fl_time 方法...
    99+
    2024-04-02
  • torchtext入门教程必看,带你轻松玩转文本数据处理
    用深度学习做nlp也有一段时间了,熟悉这块内容的同学都知道,实践算法的时候,写模型是个简单的事,最麻烦的是数据处理,数据处理不仅会浪费我们大部分时间,而且会消耗很大的计算资源,浪费人...
    99+
    2024-04-02
  • 新鲜出炉“网络挖掘”全新Python视频教程,数据工作者必看
    如果你有几年数据分析经验,或是掌握一定的统计算法/机器学习技能,为了个人能力更好的提升,建议你最好掌握“网络挖掘”。但不少人对“网络挖掘”所知甚少,到底什么是网络挖掘呢?网络型数据挖掘(简称网络挖掘)是一项主流的、重要的数据挖掘技术,常见的...
    99+
    2023-06-02
  • 深入理解 Python 中的多线程 新手必看
    示例1 我们将要请求五个不同的url: 单线程 import time import urllib2 defget_responses(): urls=[ ‘http://www.bai...
    99+
    2022-06-04
    必看 多线程 新手
  • Python pygame新手入门基础教程
    目录pygame简介pygame实现窗口设置屏幕背景色添加文字绘制多边形绘制直线绘制圆形绘制椭圆绘制矩形总结pygame简介 pygame可以实现python游戏的一个基础包。 py...
    99+
    2024-04-02
  • php实现ffmpeg处理视频的过程是怎样的
    本篇文章给大家分享的是有关php实现ffmpeg处理视频的过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近有一个项目需要使用ffmpeg处理视频,这里我写了一个d...
    99+
    2023-06-22
  • 新手必看docker安装jenkins详细教程
    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 jenkins基本工作原理...
    99+
    2024-04-02
  • VUE Nuxt.js中间件使用指南:新手入门必看
    Nuxt.js中间件是一种强大的工具,可以让你在请求到达页面之前或之后执行代码。这对于各种任务非常有用,比如权限检查、数据预取和日志记录。 Nuxt.js中间件的使用 要使用Nuxt.js中间件,你需要在你的项目中创建一个新的文件,并将...
    99+
    2024-02-04
    Nuxt.js 中间件 请求 页面 权限检查 数据预取 日志记录
  • ASP Web.config转换入门:新手必看的详细解析
    1. Web.config文件概述 Web.config文件是ASP网站的配置文件,它是一个XML文件,位于网站的根目录下。Web.config文件包含了网站的各种配置信息,包括安全配置、连接字符串、应用程序设置等。这些配置信息可以被A...
    99+
    2024-02-12
    ASP Web.config 配置 安全 连接字符串 应用程序设置
  • 云计算教程学习入门视频课件:Linux查看日志方法
    日志在排查文件的时候至关重要,因为Linux系统在运行的程序通常会把一些系统消息和错误消息写入对应的系统日志中。若是一旦出现问题,用户就可以通过查看日志来迅速定位,及时解决故障,所以学会查看日志文件也是在日常维护中很重要的操作。Linux系...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作