FFmpeg 入门简介:FFmpeg 视频处理入门教程 – 码中人
FFmpeg 常用的命令行参数如下。
-c
:指定编码器-c copy
:直接复制,不经过重新编码(这样比较快)-c:v
:指定视频编码器-c:a
:指定音频编码器-i
:指定输入文件-an
:去除音频流-vn
: 去除视频流-preset
:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y
:不经过确认,输出时直接覆盖同名文件。
控制输出文件大小
-fs (file size首字母缩写),以下将视频大小限制在200M以内。
ffmpeg -i input.avi -fs 200M output.mp4
提取音频
经常在youtube上下载视频,将视频文件导入到编辑器,会需要渲染很长时间。
如果只需要音频,提取音频之后再导入到编辑器,渲染会快很多。
ffmpeg -i input.mp4 -vn -c:a copy output.mp3
有些视频的音轨不是mp3格式,可以提取aac格式:ffmpeg 从flv视频中的提取音频 – 码中人
转换格式
转换容器格式(transmuxing)指的是,将视频文件从一种容器转到另一种容器。
举个例子,现在很多视频都是mkv格式,但某些视频剪辑工具(如final cut pro x)不支持mkv格式,只能将其转化成mp4格式。
ffmpeg -i input.mkv -c copy output.mp4
截取视频段落
前几天导出一个视频,后面有几十秒的黑场,是不需要的。可以通过开始时间和截止时间的设置截取视频段落。
ffmpeg -ss [start] -i [input] -to [end] -c copy [output]
-- 20200906更新
发现上面的写法,-to会变成-t的效果,即end的时间不是视频结束的时间,而是视频长度。
正确的写法是:
ffmpeg -i [input] -ss [start] -to [end] -c copy [output]
是的,需要把 -ss放在-i input的后面,就这么神奇,把我害苦了。
把视频分成定长段落
比如要把一个视频每20分钟分成一段。
ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment output%03d.mp4
How can I use ffmpeg to split MPEG video into 10 minute chunks? - Unix & Linux Stack Exchange
合并视频
如果视频文件编码统一且不需要要重新编码,建议使用以下方法:
- 做一个文件列表(格式如下)
- 合并
$ cat mylist.txt
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
h.264 - How to concatenate two MP4 files using FFmpeg? - Stack Overflow
字幕转换
经常下载一些网络视频的字幕,如youtube等,字幕文件是webvtt文件,后缀为vtt。ffmpeg也可以将其转化成标准的字幕格式。
ffmpeg -i input.vtt output.ass
ffmpeg -i input.vtt output.srt
因为youtube的视频文件名可能很长,可以先修改文件名,再做转换。
mv *.en.vtt en.vtt;
mv *.zh-*.vtt zh.vtt;
ffmpeg -i en.vtt en.srt;
ffmpeg -i zh.vtt zh.srt;
视频旋转方向
现在手机拍摄视频很方便,很多视频需求旋转方向,ffmpeg可以秒转。
--逆时针旋转90度
ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy output.mp4
--顺时针旋转90度
ffmpeg -i input.mp4 -metadata:s:v rotate="-90" -codec copy output.mp4
合并多个视频
有些视频网站会分段加载视频,导致下载器下载到一系列视频。这个时候需要合并这些视频才可以。
可以新建一个filelist.txt的文件,按顺序列出系列视频如下:
file '1.mp4'
file '2.mp4'
file '3.mp4'
file '4.mp4'
通过以下命令,合并成一个视频
ffmpeg -f concat -i filelist.txt -c copy output.mp4
未完待续…