有时我们可能会有视频裁剪、连接,或是提取视频音频、转码的需求,这时我们一般就会求助于百度上眼花缭乱的各种软件。然而这些软件并不省心,要么要充值,要么有广告水印,限制颇多。或者我们可以使用Premiere这种专业剪辑软件,但是如果你只是想裁个视频,是不是有点杀鸡用牛刀呢?
FFmpeg是一个开放源代码的自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
https://zh.wikipedia.org/wiki/FFmpeg
FFmpeg是一个强大的视频播放和编辑程序,它丰富的功能完全可以满足日常需求,并且无广告、干净迅捷。可惜它是一个命令行程序,没有可视化界面,需要敲命令使用,本篇文章便整理了FFmpeg日常使用的基础命令用法,方便大家使用(其实也作为自己的备忘录用啦)。
FFmpeg比较适合偶尔有轻度视频编辑需求的用户(当然它的功能十分丰富),比如下载的b站视频和音频要合并,或是flv要转成mp4,亦或是要提取视频中的音频。
下载与启动
因为FFmpeg是开源软件,因此可以直接免费获取。
FFmpeg官网:https://ffmpeg.org/
我的云盘分享:https://run.sh.cn/ffmpeg
注意:官网下载不要点击最大的那个按钮,那个是未编译的源代码。点击Windows按钮,下载已编译的可执行文件。(如果懒得找,也可以直接下载我上传到云盘的)
然后解压下载的压缩包,得到两个文件夹。
doc
文件夹为文档文件夹,里面的内容可以理解为官方教程,但是我们没必要学这么清楚,况且文档是全英文的,所以忽略就行。
bin
文件夹便是成品程序了,里面包含三个程序。ffmpeg.exe
拥有转码等视频功能;ffplay.exe
为播放器,可以播放视频;ffprobe
是用于查看文件格式的应用程序,我一次也没用到过。
这三个程序都不是直接点击启动的,需要在文件夹内按住SHIFT,再右键,选择“在此处打开 Powershell 窗口”
然后就可以在这个命令行内输入指令操作程序了。
日常使用
因为本指南主要面向于轻度用户,所以指令都最简化。
注意:所有文件都需指定目录,若不指定则默认文件在ffmpeg.exe所在的文件夹内。若文件目录或文件名带空格,请用英文引号” “扩起目录。
视频转码
通用情况
用法:ffmpeg -i [源文件] [额外参数] [新文件]
e.g. .\\ffmpeg.exe -i .\\input.flv .\\output.mp4
编码不变的情况(例如b站视频flv转mp4)
用法:ffmpeg -i [源文件] -vcodec copy -acodec copy [新文件]
e.g. .\\ffmpeg.exe -i .\\input.flv -vcodec copy -acodec copy .\\output.mp4
注意:这种转码方式速度极快,几乎不耗CPU资源,速度相当于纯复制文件,实测比上面快200倍。但此方法仅限前后编码方式不变的情况,需要你确定需求后使用。
视频裁切
用法:ffmpeg -ss [起始时间] -t [裁切片段长度] -i [源文件] -vcodec copy -acodec copy [裁切片段]
e.g. .\\ffmpeg.exe -ss 01:23:45 -t 00:00:30 -i .\\input.flv -vcodec copy -acodec copy .\\output.flv
视频拼接
使用文件列表
用法:ffmpeg -f concat -i [列表文件] -c copy [输出]
e.g. .\\ffmpeg.exe -f concat -i .\\list.txt -c copy .\\output.flv
注意:列表文件为一个txt文本文档,格式示例如下:
file ./clip1.flv
file ./clip2.flvfile ./clip3.flv
不使用文件列表(有可能出问题)
用法:ffmpeg -i "concat:[文件1]|[文件2]|[文件3]" -c copy [输出]
e.g. .\\ffmpeg.exe -i "concat:clip1.flv|clip2.flv|clip3.flv" -c copy output.flv
音画合并
编码不变的情况
用法:ffmpeg -i [视频] -i [音频] -c copy [输出]
e.g. .\\ffmpeg.exe -i video.mp4 -i audio.wav -c copy output.mkv
注意:此方法仅限前后编码方式不变的情况,需要你确定需求后使用。
重新编码的情况
用法:ffmpeg -i [视频] -i [音频] -c:v copy -c:a aac -strict experimental [输出]
e.g. .\\ffmpeg.exe -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
提取音频
提取完整音频
用法:ffmpeg -i [视频输入] -q:a 0 -map a [音频输出]
e.g. .\\ffmpeg.exe -i video.mp4 -q:a 0 -map a audio.mp3
提取一段音频
用法:ffmpeg -i [视频输入] -ss [起始时间] -t [裁切片段长度] -q:a 0 -map a [音频输出]
e.g. .\\ffmpeg.exe -i video.mp4 -ss 00:10:00 -t 00:00:30 -q:a 0 -map a output.mp3
去除音频
用法:ffmpeg -i [视频输入] -map 0:0 -vcodec copy [视频输出]
e.g. .\\ffmpeg.exe -i .\input.mp4 -map 0:0 -vcodec copy output.mp4
其他
ffmpeg的功能远不止这些,以上只是我常用的几个用法分享给大家,如果之后有新的使用命令,我也会继续补充。其实ffmpeg的转码参数上面几乎没有解释,容器类别和编码类别都省略没谈,如果感兴趣可以自己研究。
详细参数
下面是详细参数列表,命令以.\\ffmpeg.exe
开头,后加参数控制程序。
主要参数 -i——设置输入文件名。 -f——设置输出格式。 -y——若输出文件已存在时则覆盖文件。 -fs——超过指定的文件大小时则结束转换。 -t——指定输出文件的持续时间,以秒为单位。 -ss——从指定时间开始转换,以秒为单位。 -t从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。 -title——设置标题。 -timestamp——设置时间戳。 -vsync——增减Frame使影音同步。 -c——指定输出文件的编码。 -metadata——更改输出文件的元数据。 -help——查看帮助信息。 影像参数 -b:v——设置影像流量,默认为200Kbit/秒。(单位请引用下方注意事项) -r——设置帧率值,默认为25。 -s——设置画面的宽与高。 -aspect——设置画面的比例。 -vn——不处理影像,于仅针对声音做处理时使用。 -vcodec( -c:v )——设置影像影像编解码器,未设置时则使用与输入文件相同之编解码器。 声音参数 -b:a——设置每Channel(最近的SVN版为所有Channel的总合)的流量。(单位请引用下方注意事项) -ar——设置采样率。 -ac——设置声音的Channel数。 -acodec ( -c:a ) ——设置声音编解码器,未设置时与影像相同,使用与输入文件相同之编解码器。 -an——不处理声音,于仅针对影像做处理时使用。 -vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。) 注意事项 以-b:v及-b:a参数设置流量时,根据使用的ffmpeg版本,须注意单位会有kbits/sec与bits/sec的不同。(可用ffmpeg -h显示说明来确认单位。) 例如,单位为bits/sec的情况时,欲指定流量64kbps时需输入 -b:a 64k;单位为kbits/sec的情况时则需输入 -b:a 64。 以-acodec及-vcodec所指定的编解码器名称,会根据使用的ffmpeg版本而有所不同。例如使用AAC编解码器时,会有输入aac与libfaac的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats确认输入的编解码器是否能运作。 引用来源:https://zh.wikipedia.org/wiki/FFmpeg
发表回复