FFmpeg3.2安装(CentOS release 6.5)

yasm安装
Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集。 
接受NASM和GNU汇编器(gas)语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。

下载源:http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
安装
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz
./configure
make
make install
 

lame安装
用于mp3编码。由于专利版权问题,ffmpeg默认不带mp3格式编码器,但是有mp3格式解码器。

下载源:https://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz/download
安装
wget https://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz/download
#下载下来的文件名是down重命名为实际的名字
mv download lame-3.99.5.tar.gz
tar -zxvf lame-3.99.5.tar.gz
cd ./lame-3.99.5
./configure
make
make install
#编译安装后并没有加入系统库中,添加如下软连接加入系统库
ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0

FFmpeg安装
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

下载源:http://www.ffmpeg.org/releases/ffmpeg-3.2.tar.gz
安装
wget http://www.ffmpeg.org/releases/ffmpeg-3.2.tar.gz
tar -zxvf ffmpeg-3.2.tar.gz
cd ffmpeg-3.2
#编译配置,使mp3编码器生效
./configure --enable-libmp3lame
make
make install

 

[root@localhost ffmpeg-3.2]# ffmpeg
ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17)
  configuration: --enable-libmp3lame
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

 

[root@localhost ffmpeg-3.2]# ffmpeg -codecs |grep mp3
ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17)
  configuration: --enable-libmp3lame
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
 DEA.L. mp3                  MP3 (MPEG audio layer 3) (decoders: mp3 mp3float ) (encoders: libmp3lame )
 D.A.L. mp3adu               ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adu mp3adufloat )
 D.A.L. mp3on4               MP3onMP4 (decoders: mp3on4 mp3on4float )

执行以上命令则代表安装完毕

参考https://blog.csdn.net/clj198606061111/article/details/53054270

 

# FFMPEG 使用说明

## 截图命令

### 截取一张352x240尺寸大小,格式为jpg的图片
```
ffmpeg -i input_file -y -f image2 -t 0.001 -s 352x240 output.jpg
```

### 把视频的前30帧转换成一个Animated Gif
```
ffmpeg -i input_file -vframes 30 -y -f gif output.gif
```

### 在视频的第8.01秒出截取230x240的缩略图
```
ffmpeg -i input_file -y -f mjpeg -ss 8 -t 0.001 -s 320x240 output.jpg
```

### 每隔一秒截一张图

```
ffmpeg -i out.mp4 -f image2 -vf fps=fps=1 out%d.png
```

### 每隔20秒截一张图

```
ffmpeg -i out.mp4 -f image2 -vf fps=fps=1/20 out%d.png
```

### 多张截图合并到一个文件里(2x3)每隔一千帧(秒数=1000/fps25)即40s截一张图

```
ffmpeg -i out.mp4 -frames 3 -vf "select=not(mod(n\,1000)),scale=320:240,tile=2x3" out.png
```

### 从视频中生成GIF图片
```
ffmpeg -i out.mp4 -t 10 -pix_fmt rgb24 out.gif
```
### 转换视频为图片(每帧一张图)
```
ffmpeg -i out.mp4 out%4d.png
```

### 图片转换为视频
```
ffmpeg -f image2 -i out%4d.png -r 25 video.mp4
```

## 切分视频并生成M3U8文件

```
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 20 -hls_list_size 0 -hls_wrap 0 output.m3u8
```

相关参数说明:

```
-i 输入视频文件
-c:v 输出视频格式
-c:a 输出音频格式
-strict
-f hls 输出视频为HTTP Live Stream(M3U8)
-hls_time 设置每片的长度,默认为2,单位为秒
-hls_list_size 设置播放列表保存的最多条目,设置为0会保存所有信息,默认为5
-hls_wrap 设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0。这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多片的数量。
```
注意,播放列表的sequence number对每个segment来说都必须是唯一的,而且它不能和片的文件名(当使用wrap选项时,文件名可能会重复使用)混淆。

## 分离视频音频流

```
ffmpeg -i input_file -vcodec copy -an output_file_video    //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio    //分离音频流
```

## 视频解复用

```
ffmpeg -i test.mp4 -vcoder copy -an -f m4v test.264
ffmpeg -i test.avi -vcoder copy -an -f m4v test.264
```

## 视频转码

```
ffmpeg -i test.mp4 -vcoder h264 -s 352*278 -an -f m4v test.264    //转码为码流原始文件
ffmpeg -i test.mp4 -vcoder h264 -bf 0 -g 25 -s 352-278 -an -f m4v test.264    //转码为码流原始文件
ffmpeg -i test.avi -vcoder mpeg4 -vtag xvid -qsame test_xvid.avi    //转码为封装文件 -bf B帧数目控制, -g 关键帧间隔控制, -s 分辨率控制
```
## 视频封装

```
ffmpeg -i video_file -i audio_file -vcoder copy -acodec copy output_file
```

## 视频剪切

```
ffmpeg -i test.avi -r 1 -f image2 image.jpeg //视频截图
ffmpeg -i input.avi -ss 0:1:30 -t 0:0:20 -vcoder copy -acoder copy output.avi //剪切视频 -r 提取图像频率, -ss 开始时间, -t 持续时间
```

## 视频录制

```
ffmpeg -i rtsp://hostname/test -vcoder copy out.avi
```

## YUV序列播放

```
ffplay -f rawvideo -video_size 1920x1080 input.yuv
```

## YUV序列转AVI

```
ffmpeg -s w*h -pix_fmt yuv420p -i input.yuv -vcoder mpeg4 output.avi
```

### 常用参数说明

#### 主要参数
```
-i 设定输入流
-f 设定输出格式
-ss 开始时间
```
#### 视频参数
```
-b 设定视频流量,默认是200Kbit/s
-s 设定画面的宽和高
-aspect 设定画面的比例
-vn 不处理视频
-vcoder 设定视频的编码器,未设定时则使用与输入流相同的编解码器
```
### 音频参数
```
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定沈阳的Channel数
-an 不处理音频
```

## 使用ffmpeg合并MP4文件

```
ffmpeg -i "Apache Sqoop Tutorial Part 1.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i "Apache Sqoop Tutorial Part 2.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "Apache Sqoop Tutorial Part 3.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate3.ts
ffmpeg -i "Apache Sqoop Tutorial Part 4.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate4.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts|intermediate3.ts|intermediate4.ts" -c copy -bsf:a aac_adtstoasc "Apache Sqoop Tutorial.mp4"
```

## 使用ffmpeg转换flv到mp4

```
ffmpeg -i out.flv -vcodec copy -acodec copy out.mp4
```

## 视频添加水印

### 水印局中

```
ffmpeg -i out.mp4 -i [email protected] -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-(overlay_h)/2" output.mp4
```

参数解释

* -i out.mp4(视频源)
* -i [email protected](水印图片)
* overlay 水印的位置
* output.mp4 输出文件

## 视频翻转和旋转

### 翻转

#### 水平翻转语法: -vf hflip

```
ffplay -i out.mp4 -vf hflip
```

#### 垂直翻转语法:-vf vflip

```
ffplay -i out.mp4 -vf vflip
```

### 旋转

语法:transpose={0,1,2,3}

* 0:逆时针旋转90°然后垂直翻转

* 1:顺时针旋转90°

* 2:逆时针旋转90°

* 3:顺时针旋转90°然后水平翻转

### 将视频顺时针旋转90度

```
ffplay -i out.mp4 -vf transpose=1
```

### 将视频水平翻转(左右翻转)

```
ffplay -i out.mp4 -vf hflip
```

### 顺时针旋转90度并水平翻转

```
ffplay -i out.mp4 -vf transpose=1,hflip
```

## 添加字幕

有的时候你需要给视频加一个字幕(subtitle),使用ffmpeg也可以做。一般我们见到的字幕以srt字幕为主,在ffmpeg里需要首先将srt字幕转化为ass字幕,然后就可以集成到视频中了(不是单独的字幕流,而是直接改写视频流)。

```
ffmpeg -i my_subtitle.srt my_subtitle.ass
ffmpeg -i inputfile.mp4 -vf ass=my_subtitle.ass outputfile.mp4
```

但是值得注意的是:

> my_subtitle.srt需要使用UTF8编码,老外不会注意到这一点,但是中文这是必须要考虑的;

将字幕直接写入视频流需要将每个字符渲染到画面上,因此有一个字体的问题,在ass文件中会指定一个缺省字体,例如Arial,但是我们首先需要让ffmpeg能找到字体文件,不然文字的渲染就无从谈起了。ffmpeg使用了fontconfig来设置字体配置。你需要首先设置一下FONTCONFIG_PATH或者FONTCONFIG_FILE环境变量,不然fontconfig是无法找到配置文件的,这一点请参看这篇文章,如果你设置的是FONTCONFIG_PATH,那把配置文件保存为%FONTCONFIG_PATH%/font.conf即可,然后你可以在font.conf文件中配置字体文件的路径之类的。

Windows下为fontconfig设置如下的环境变量

```
FC_CONFIG_DIR=C:\ffmpeg
FONTCONFIG_FILE=font.conf
FONTCONFIG_PATH=C:\ffmpeg
PATH=C:\ffmpeg\bin;%PATH%
```

下面是一个简单的Windows版`font.conf`文件。

```xml

C:\WINDOWS\Fonts


   mono
   monospace


   sans-serif
   serif
   monospace
   sans-serif


   Times
   Times New Roman
   serif


   Helvetica
   Arial
   sans


   Courier
   Courier New
   monospace


   serif
   Times New Roman


   sans
   Arial


   monospace
   Andale Mono


   
      Courier New
   

   
      monospace
   



   
      Courier
   

   
      monospace
   


```

下面这个是Linux系统下改版过来的

```xml





C:/Windows/Fonts



    mono
    monospace


fontconfig/fonts.conf


conf.d
local.conf



    Times
    Times New Roman
    serif


    Helvetica
    Arial
    sans


    Courier
    Courier New
    monospace



    serif
    Times New Roman


    sans
    Arial


    monospace
    Andale Mono


```

参考:

> http://blog.raphaelzhang.com/2013/04/video-streaming-and-ffmpeg-transcoding/

## 嵌入字幕

在一个MP4文件里面添加字幕,不是把 .srt 字幕文件集成到 MP4 文件里,而是在播放器里选择字幕,这种集成字幕比较简单,速度也相当快

```
ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4
```

希望字幕直接显示出来,其实也不难

```
ffmpeg -i subtitle.srt subtitle.ass
ffmpeg -i input.mp4 -vf ass=subtitle.ass output.mp4
```
参考:

> http://blog.neten.de/posts/2013/10/06/use-ffmpeg-to-burn-subtitles-into-the-video/

你可能感兴趣的:(Linux)