ffmpeg安装
windows安装
下载对应位数的压缩包,解压如下
配置环境变量
linux安装
https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
解压
1 | tar -xjvf ffmpeg-4.0.2.tar.bz2 |
先安装yasm
1 | cd yasm-1.3.0/ |
如果未安装gcc,执行如下指令安装gcc
1 | yum install gcc-c++ |
安装ffmpeg
不指定prefix,可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr/local/share(指定安装位置)make编译过程有点长,耐心等待。
1 | cd ffmpeg-4.0.2 |
添加软链
1 | cp /home/ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg |
查看版本,检查是否安装正确
1 | ffmpeg -version |
如果报如下异常:
ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
添加文件,并编辑写入: /home/ffmpeg/lib
执行命令: vim /etc/ld.so.conf.d/ffmpeg.conf
完成后执行如下,使配置生效。重新查看版本,安装完成
1 | /sbin/ldconfig 或者直接运行 ldconfig |
视频流按时间截取mp4
1 | ffmpeg -i 视频地址 -vcodec copy -acodec copy -ss 开始时间 -to 结束时间 输出文件地址 -y |
参数详解
参数 | 描述 |
---|---|
-i | 输入您要处理的视频文件路径 |
视频地址 | 可以是视频文件,也可以是视频流 |
-vcodec copy | 表示使用跟原视频一样的视频编解码器 |
-acodec copy | 表示使用跟原视频一样的音频编解码器 |
-ss 开始时间 | 从某个时间开始 |
-to 结束时间 | 从某个时间结束 |
-y | 表示如果输出文件已存在则覆盖 |
海康视频需要截取为ts文件
1 | ffmpeg -i "rtsp://admin:密码@192.168.0.222/h264/ch1/main/av_stream?videoCodecType=H.264" -vcodec copy -acodec copy -ss 00:00:00 -to 00:00:10 F:\test.ts -y |
利用ffmpeg将ts文件转为mp4
1 | ffmpeg -y -i test.ts -c:v libx264 -c:a copy -bsf:a aac_adtstoasc output.mp4 |
截取图片
1280x720为图片的分辨率
1 | ffmpeg -i rtmp://58.200.131.2:1935/livetv/hunantv -vframes 1 -y -f image2 -t 1 -s 1280x720 test.jpg |
java调用
1 | Process process = Runtime.getRuntime().exec(command);//执行命令 |
问题:如果输入的视频地址掉线或者网络不畅,java执行后会导致线程死锁,所以使用如下方法,增加一个线程来设置超时时间。
1 | public static int executeCommand(final String command, final long timeout) throws IOException, InterruptedException, TimeoutException { |