被 myy 送退役了,于是这个 blog 以后可能大部分都是这些内容了。
——2020.12.6
您是有多能咕……
本文仅为个人使用笔记,不保证可读性。
安装
首先安装。Linux 用户显然会自己搞。
Windows 人得去下编译好的包,。gyan.dev
和BtbN
不知道有什么区别
然后ffmpeg --help
就可以看到简短的帮助了。想看到完整的帮助可以ffmpeg -h full
(长约 1MB 警告)。
简要介绍
开始,随便输入一条指令:ffmpeg -i input.mp3 output.ogg
。
这就是 ffmpeg 最基本的使用方式。
速查
ffmpeg -codecs
:查看 ffmpeg 支持的所有编码格式。
ffmpeg -help encoder=[code]
:查看一个编码格式的详细信息和参数。
ffmpeg -formats
:查看 ffmpeg 支持的所有封装格式。
ffmpeg -help muxer=[format]
:查看一个编码格式的详细信息和参数。
ffmpeg -i [input_file]
:查看关于input_file
的格式信息。
-c
用来指定输出文件流的编码。-c:v
指定所有视频流的编码,-c:a
指定所有音频流的编码。
如果有多个流,亦可以采用-c:v:1
来指定第 2 个视频流的编码。
偶尔可能会被要求加-strict -2
。
-vn
, -an
, -sn
禁用所有视频流、所有音频流、所有字幕流。还有一个-dn
不会用。
当然使用-map
可以解决上述所有功能,但是它们胜在比较短。
-ar
, -r
-ar
指定音频流的采样率,以 Hz 为单位。比如-ar 32000
指定音频流采样率为 32000 Hz。
-r
指定视频流的帧率,以 Hz 为单位(就是平时说的「帧每秒(FPS)」啦)。
-s
这个选项可以指定视频的尺寸,以像素为单位。例如-s 1280x720
指定流视频流尺寸为 720P。
-t
, -ss
-t
用来指定输出文件的持续时间,-ss
用来指定输出文件相对于输入文件的开始时间。
比如-ss 12:25 -t 8:02
会截取输入文件的 12 分 25 秒至 20 分 27 秒。
另外,可以写小数点,所以-t 1:14.514
之类的参数是合法的。
-metadata
用来设置输出文件的元数据。类似于-c
,-metadata:a:0 title="my title"
之类的参数是合法的。
-b
用来指定输出文件流的比特率。类似于-c
,-b:a:0 128k
之类的参数是合法的。
-map
-map
用来选择哪些流应该被包含到输出文件中。
上面那张图片解释得非常清楚了。
-map_metadata
选择将某些流的元数据复制到输出文件的某些流中。(没用过,口胡的)
本人目前仅使用过-map_metadata -1
,就是使输出文件不包含任何元数据。
-disposition
选择流的处理方式。
有以下可选处理方式:
1 | default |
类似-c
和-map_metadata
,-disposition:1 default
和-disposition:v:1 attached_pic
等参数是合法的。
本人只用来给音频添加封面,然后发现直接ffmpeg -i in.mp3 -i pic.jpg -map 0 -map 1 -c copy out.mp3
和另加上-disposition:1 attached_pic
效果没有区别,因为只有一个视频流。
哦,说起来,由于某些(大部分)windows 版本对 ID3v2.4 的支持有一定问题,所以想要能使用 windows 资源管理器看到封面图片,需要-id3v2_version 3
改成 ID3v2.3 标准。(参见 ffmpeg Documentation #AVOptions)
-threads
字面意思,例如-threads 8
指定开 8 个线程同时跑。
本人使用例
curl
下载网课(分段.ts
)并用ffmpeg
合并
我比较菜找不到.m3u8
,然后恰好某网站的.ts
又是顺序排列的,于是直接请求到返回404
为止,再ffmpeg
合并就好了。
颇具 oi 风格的码风,坏
1 |
|
youtube-dl
下载视频并转为.mp3
文件
1 | from os import system as ss |
改变速度
1 | ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv |