Please enable Javascript to view the contents

FFmpeg 常用操作

 ·  ☕ 3 分钟

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

未完待续…

分享

码中人
作者
码中人
Web Developer