前言
大多数获取视频的封面都是使用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 |