前言
大多数获取视频的封面都是使用FFMpeg获取视频的第一帧,但是很多视频第一帧是纯黑的,我们就要取后面的帧,这时候我们就要知道视频本身有多长。
获取视频时长
容器时长(container duration)的获取方法:
1  | ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i a.mp4  | 
音视频流时长(stream duration)的获取方法:
1  | ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 a.mp4  | 
一个媒体文件里边有多个音视频流,各个流的时长也未必一样,一般播放器会以video stream的时长作为播放时长。
生成封面
1  | ffmpeg -i a.mp4 -y -f image2 -ss 2 -frames 1 a001.jpg  | 
方式2
1  | ffmpeg -i a.mp4 -y -f image2 -ss 2 -t 0.001 a002.jpg  | 
-ss 从几秒开始
NodeJS调用
1  | let cp = require('child_process');  | 
封装
1  | let cp = require('child_process');  | 
导出/导入
1  | let cp = require('child_process');  | 
导入
1  | const {  | 
CentOS安装ffmpeg
YUM安装
首先更新系统。
1  | sudo yum install epel-release -y  | 
安装Nux Dextop Yum 源
由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作。
CentOS 7
1  | sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro  | 
CentOS 6
1  | sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro  | 
安装FFmpeg 和 FFmpeg开发包
1  | sudo yum install ffmpeg ffmpeg-devel -y  | 
测试是否安装成功
1  | ffmpeg  | 
Docker内不要添加sudo
1  | # 安装ffmpeg  | 
编译安装
不推荐这种方式,编译时间太长。
安装
安装git
1  | yum install -y git  | 
安装yasm
1  | yum -y install centos-release-scl  | 
先下载源码包:
1  | git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg  | 
然后进入ffmpeg文件夹,依次执行下列语句,当然连起来也可以:
1  | cd ffmpeg  | 
时间较长,不出意外会正常安装好。
环境变量
环境变量
1  | cd /etc/profile.d/  | 
创建配置文件
1  | vi /etc/profile.d/ffmpeg.sh  | 
内容设置为
1  | # ffmpeg  | 
配置生效
1  | source /etc/profile  | 
查看是否生效
1  | cd $FFMPEG_HOME  | 
然后检查版本。
1  | ffmpeg -version  | 
错误处理
如果报错
nasm/yasm not found or too old. Use –disable-x86asm for a crippled build.
下载地址
http://www.tortall.net/projects/yasm/releases/
1  | wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz  |