FFmpeg

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPLGPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。

TL;DR

# Extract the sound from a video and save it as MP3:
$ ffmpeg -i video.mp4 -vn sound.mp3

# Save a video as GIF, scaling the height to 1000px and setting framerate to 15:
$ ffmpeg -i video.mp4 -vf 'scale=-1:1000' -r 15 output.gif

# Combine numbered images (`frame_1.jpg`, `frame_2.jpg`, etc) into a video or GIF:
$ ffmpeg -i frame_%d.jpg -f image2 video.mpg|video.gif

# Quickly extract a single frame from a video at time mm:ss and save it as a 128x128 resolution image:
$ ffmpeg -ss mm:ss -i video.mp4 -frames 1 -s 128x128 -f image2 image.png

# Trim a video from a given start time mm:ss to an end time mm2:ss2 (omit the -to flag to trim till the end):
$ ffmpeg -ss mm:ss -to mm2:ss2 -i video.mp4 -codec copy output.mp4

# Convert AVI video to MP4. AAC Audio @ 128kbit, h264 Video @ CRF 23:
$ ffmpeg -i input_video.avi -codec:a aac -b:a 128k -codec:v libx264 -crf 23 output_video.mp4

# Remux MKV video to MP4 without re-encoding audio or video streams:
$ ffmpeg -i input_video.mkv -codec copy output_video.mp4

# Convert MP4 video to VP9 codec. For the best quality, use a CRF value (recommended range 15-35) and -b:v MUST be 0:
$ ffmpeg -i input_video.mp4 -codec:v libvpx-vp9 -crf 30 -b:v 0 -codec:a libopus -vbr on -threads number_of_threads output_video.webm

Usage

安装和卸载FFmpeg

macOS安装FFmpeg

# 查看ffmpeg的安装选项,可以按照你自己的要求选装
$ brew info ffmpeg

# 安装FFmpeg
$ brew install ffmpeg --with-fdk-aac --without-faac

Linux卸载FFmpeg

$ sudo apt -y remove libglu1-mesa-dev ffmpeg
$ sudo apt -y purge libglu1-mesa-dev ffmpeg
$ sudo apt -y autoremove

基本信息

#列出支持的编解码器
$ ffmpeg -codecs
#列出支持的滤镜
$ ffmpeg -filters
#列出支持的格式
$ ffmpeg -formats

音频格式转换

# wav to mp3
$ ffmpeg -i audio.wav -acodec libmp3lame audio.mp3

# ogg to mp3
$ ffmpeg -i audio.ogg -acodec libmp3lame audio.mp3

# ac3 to mp3
$ ffmpeg -i audio.ac3 -acodec libmp3lame audio.mp3

# aac to mp3
$ ffmpeg -i audio.aac -acodec libmp3lame audio.mp3

视频格式转换

Windows下,我们有很多视频格式转换的工具,尽管良莠不齐,但是只要有耐心,总是可以达到转换的要求,在macOS下,App Store上也可以找到一些转码工具,但是一般都价格不菲。事实上,绝大部分视频转码工具底层都用到了FFmpeg,而FFmpeg是完全开源和免费的,既然如此,我们为何不直接使用ffmpeg来进行视音频的转码处理呢。

# 把光驱DVD格式文件转成MP4格式
$ cat VIDEO_TS.VOB VTS_01_0.VOB VTS_01_1.VOB VTS_01_2.VOB | ffmpeg -i - ~/mika_01.mp4

# 抽取flv视频中的音频
$ ffmpeg -i INPUT.flv -acodec libmp3lame -ab 128k OUTPUT.mp3

# 把AVI格式转换成MP4格式
$ ffmpeg -i INPUT.avi -f mp4 -vcodec mpeg4 -maxrate 1000 -b 700 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -ab 192 -s 320x240 -aspect 4:3 OUTPUT.mp4