当前位置: 首页 > 热点

FFmpeg——从完全不懂,到轻松入门

2023-04-09 05:13:01 来源:哔哩哔哩

目录


(资料图片仅供参考)

-前言

-安装与环境配置

--下载

--语法与环境配置

-FFmpeg基本命令

--输入与流信息查看

--输出

--语句顺序与流过滤

--编码器的查看与设定

前言

本人才疏学浅,文章内可能有错误的或不恰当的地方,欢迎各位大佬指正。

写本文的原因,是因为我发现网上难以找到合适的FFmepg教学,而我自身的相关知识大部分都从一位网友那里学来的。所以作此文,为了让大家超快速地上手FFmpeg。

如果你现在还不具备视频的相关知识,需要先看我的这篇文章视频、音频、字幕…基础知识,从完全不懂,到轻松入门。我不会在下文中详说重复的知识。

因为FFmpeg的内容及其之多,我只能写下我会的那点皮毛,这点皮毛知识应该能让完全不懂的朋友完成自己想做的事。

安装与环境配置

下载

这是FFmpeg的官网下载地址

ffmpeg.org/download.html#build-windows

选择你的系统

下载网站有两个,随便找一个下载都可以

这里只介绍Windows下的情况

推荐git-full或者gpl-shared

下载完后解压(别告诉我你不会解压)

解压后的那个文件夹需要放在一个固定的位置,放好后就不要再动它了。所以建议直接放C盘根目录。

语法与环境配置

首先你需要认识一下语法:

字符串需要用半角双引号框起来,就像这样——"路径"。这是为了防止字符串里有特殊字符影响程序,比如空格;这些特殊字符会导致程序识别到的字符串与你想输入的不一样。

全局变量使用百分号框起来,就像这样——%变量%。

Windows有很多默认的环境变量,比如%windir%=C:\Windows。

打开ffmpeg的方式,就是直接用cmd启动。

cmd是Windows自带的一个命令行工具,这个程序在"%windir%\system32\cmd.exe",所以每次打开它非常得麻烦,这时候要么在桌面创建一个快捷方式,要么win+r打开程序——运行,用这个程序运行cmd。

这个程序的用法,已经写在它的脸上了,你不可能不会用。

在cmd里输入ffmpeg的路径,就可以使用ffmpeg了。

比如我的ffmpeg.exe在这里,输入它的路径名即可。

如果用“运行”打开程序,就必须输入程序的路径,比如我想运行C盘根目录下的"游戏.exe",我就要输入"C:\游戏.exe"。但如果我想打开cmd,却只用输入cmd即可,这是为何?

因为这里输入cmd,其实相当于把环境变量%path%下的所有路径里叫cmd的文件全部打开了一遍,而%path%的值里默认有"%windir%\system32",所以直接输入cmd就能找到"%windir%\system32\cmd.exe"。

这时候聪明的你一定想到了,如果给%path%添加一个ffmpeg所在路径的值,不就可以直接调用ffmpeg了吗?

按图中顺序点击,给%path%添加bin那个文件夹的路径即可。

然后就可以直接在cmd里输入ffmpeg来调用ffmpeg.exe了。

FFmpeg基本命令

[ffmpeg -h]可以看到帮助文档。

官网文档地址:http://ffmpeg.org/documentation.html

输入与流信息查看

使用ffmpeg编解码视频,首先要有输入源,使用命令[-i "路径名"]即可输入文件。

eg:ffmpeg -i "C:\好康的.mp4" -i "D:\学习资料\123.avi"

当只有输入的时候,回车运行,将看到该文件的信息。

eg:

这时候我们能看到的最重要的信息,就是流信息。

Stream #n:m——n是输入文件的序号,第一个文件就是0,m是该文件的流序号,比如上图中的0:3就是个字幕流。

Video、Audio、Subtitle是什么意思不用我多说,Attachment是附件,比如mkv里可以塞入字体附件,图中0:4就是一个字体流。

输出

输出很简单,输入后,写上输出的路径名,就可以输出。

eg:ffmpeg 输入1的参数 -i "输入1" 输出1的参数 "输出1" 输出2的参数 "输出2"

tip:输出的文件需要给后缀,ffmpeg会通过后缀判断封装甚至编码器,比如.gif。

语句顺序与流过滤

每个文件前面的参数,是控制该文件的参数。例如

ffmpeg -ss 20:00 -t 120 -i "C:\1.mp4" -ss 1:20 -t 10 "D:\2.mp4"

意思是,先从1的20:00开始截取120s,然后从这120s中的第80s开始截取10s,把这10s输出为2。

这时候你会发现,如果原视频有多个音频+多个字幕,输出后就只剩一个了,因为ffmpeg默认只输出每种流的第一个流,且不输出附件流。这时候只需要

ffmpeg -ss 20:00 -t 120 -i "C:\1.mp4" -map 0 -ss 1:20 -t 10 "D:\2.mp4"

就可以输出全部的流了。

[-map]命令可以过滤输出的流,比如[-map 0:1]就是只输出第一个输入文件的第二个流,[-map 0]就是输出第一个文件的全部流。输出到哪?当然是到后面跟着的那个"输出"。

编码器的查看与设定

ffmpeg里有非常多的编码器。如果你想知道有哪些,只需要

ffmpeg -encoders

如果你想查看单个编码器的参数,只需要

ffmpeg -h encoder=编码器名

eg:[ffmpeg -h encoder=libx264]即可查看x264编码器参数。

确定了要使用的编码器之后,在输出端指定编码器即可。

指定编码器的命令为[-c:流类型简写 编码器名]或者[-流类型简写codec 编码器名]

eg:ffmpeg -i "C:\1.mp4" -c:v libx265 -acodec flac "D:\2.mp4"

eg:ffmpeg -i "M:\3.mp4" -c:a aac -vcodec libsvtAV1 "N:\4.mp4"

光指定编码器肯定是不够的,还需要给编码器一些必要的参数。

参数放置的位置紧跟在指定编码器的命令后即可。

eg:ffmpeg -i "C:\1.mp4" -c:v libx265 -preset 3 -qp 24 -c:a aac -aac_coder 0 "D:\2.mp4"

当然,ffmpeg的通用参数也是不能忽略的,如

[-b:流类型简写]设置该流的目标码率

[-q:a]设置音频质量(仅VBR可用)

等等非常之多,建议大家参考上文中提到的官方文档,并在遇到需求时逐一查找,善用搜索引擎,以达到高学习效率。

关键词:

相关阅读

Copyright   2015-2022 华中技术网 版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com