使用ffmpeg进行视频截图转码
2018-01-26 18:10
579 查看
ffmpeg官网 http://ffmpeg.org/
官方编译过的启动很简单,执行命令
下载完压缩包后,解压,进入ffmpeg目录(解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。)
ffmpeg 目录
执行
设置环境变量
window安装
下载
访问 https://ffmpeg.zeranoe.com/builds/ 下载windows安装包解压
添加到环境变量
验证安装
输入ffmpeg -version命令查看ffmpeg版本,输出版本号说明安装成功
Linux安装
操作系统:CentOS7 ffmpeg版本:3.4.1安装
先访问ffmpeg官网下载linux安装包 http://ffmpeg.org/download.html ,这里我下载的是官方已经编译过的版本,别问我为啥不自己编译,因为我自己编译耗费了好久,出现了n个问题…官方编译过的启动很简单,执行命令
./ffmpeg就可以了
下载完压缩包后,解压,进入ffmpeg目录(解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。)
ffmpeg 目录
执行
./ffmpeg -version查看版本信息,可以看到编码库已经编译好了,不用自己再下载安装libx264等编码库了,省了不少时间
# ./ffmpeg -version ffmpeg version 3.4.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2017 the FFmpeg developers built with gcc 6.4.0 (Debian 6.4.0-10) 20171112 configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100
设置环境变量
同windows一样,在PATH添加环境变量: # vi /etc/profile PATH=$PATH:/usr/local/ffmpeg export PATH 保存退出 # source /etc/profile 设置生效
通用参数
-L 显示许可证 -h 帮助 -version 显示版本 -fromats 显示可用的格式,编解码的,协议的... -f fmt 强制输入或输出文件格式。格式通常是自动检测输入文件,并从输出文件的文件扩展名中猜测出来的,所以在大多数情况下这个选项是不需要的。 -i url 输入文件的地址 -y 覆盖文件而不询问 -n 不要覆盖输出文件,如果指定的输出文件已经存在,立即退出 -stream_loop number 设置输入流应循环的次数。循环0意味着没有循环,循环-1意味着无限循环 -c [:stream_specifier] | -codec [:stream_specifier] 选择一个编码器(当在输出文件之前使用)或解码器(当在输入文件之前使用时)用于一个或多个流 -t duration 当用作输入选项(之前-i)时,限制从输入文件中读取的数据的持续时间 -fs limit_size 设置文件大小限制,以字节表示。超出限制后不会写入更多字节。输出文件的大小稍微大于请求的文件大小 image2 截图 copy 复制 -vcodec 等同于-codec:v -r 设置帧率 -ab 设置比特率 -vol 音量提高到200% -ss 开始切割的时间 ... 更多参数请参考官网 http://ffmpeg.org/ffmpeg.html[/code]举例
复制本地视频并转换格式为MP4 ffmpeg -i 本地视频 -y -c:v copy 转换视频.mp4 转换本地视频为MP4格式 ffmpeg -i 本地视频 -y -c:v libx264 -strict -2 转换视频.mp4 截取视频1s处的一张截图 ffmpeg -i 本地视频 -y -r 1 -t 1 图片名.jpg 截取指定时间点 ffmpeg -i 本地视频 -y -ss 00:00:15 -t 0.001 图片名.jpg 截取视频1s的多张截图并按照3位数命名 ffmpeg -i 本地视频 -y -t 1 图片名-%03d.jpg 可以设置开始的时间,和你想要截取的时间。 ffmpeg -i 本地视频 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -ss 表示开始时间 -t 表示共要多少时间。 如此,ffmpeg会从视频的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。java调用
package user; import org.joda.time.DateTime; import org.junit.Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class TestVideo { @Test public void getVideoThumbnail() throws IOException { //ffmpeg -i xxx.mp4 -y -f image2 -t 0.001 -s 125x125 xxx.jpg List<String> cmd = new java.util.ArrayList<>(); // 视频提取工具的位置 cmd.add("D://ffmpeg/bin/ffmpeg"); cmd.add("-i"); cmd.add("d://bb.mp4"); cmd.add("-y"); cmd.add("-f"); cmd.add("image2"); cmd.add("-t"); cmd.add("0.002"); cmd.add("d://aa.png"); ProcessBuilder builder = new ProcessBuilder(); builder.command(cmd); builder.redirectErrorStream(true); builder.start(); } @Test public void getVideoTranscoding() throws IOException, InterruptedException { String sourcePath = "d://a.mp4"; long startTime = System.currentTimeMillis(); List<String> cmd = new ArrayList<>(); // 视频提取工具的位置 cmd.add("D://ffmpeg/bin/ffmpeg"); cmd.add("-i"); cmd.add(sourcePath); cmd.add("-c:v"); cmd.add("libx264"); cmd.add("-strict"); cmd.add("-2"); cmd.add("d://转换1-" + DateTime.now().getMillis() + ".mp4"); ProcessBuilder builder = new ProcessBuilder(); builder.command(cmd); builder.redirectErrorStream(true); Process process = builder.start(); InputStream in = process.getInputStream(); outStream(in); System.out.println("耗时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒"); startTime = System.currentTimeMillis(); cmd.clear(); // 视频提取工具的位置 cmd.add("D://ffmpeg/bin/ffmpeg"); cmd.add("-i"); cmd.add(sourcePath); cmd.add("-c:v"); cmd.add("copy"); cmd.add("-f"); cmd.add("mp4"); cmd.add("d://转换2-" + DateTime.now().getMillis() + ".mp4"); builder = new ProcessBuilder(); builder.command(cmd); builder.redirectErrorStream(true); process = builder.start(); in = process.getInputStream(); outStream(in); System.out.println("耗时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒"); startTime = System.currentTimeMillis(); cmd.clear(); // 视频提取工具的位置 cmd.add("D://ffmpeg/bin/ffmpeg"); cmd.add("-i"); cmd.add(sourcePath); cmd.add("-y"); cmd.add("-r"); cmd.add("1"); cmd.add("-f"); cmd.add("image2"); cmd.add("-t"); cmd.add("0.002"); cmd.add("d://截图-" + DateTime.now().getMillis() + ".jpg"); builder = new ProcessBuilder(); builder.command(cmd); builder.redirectErrorStream(true); builder.start(); System.out.println("耗时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒"); System.out.println("转换成功"); } private void outStream(InputStream p) { // 用一个读输出流类去读 BufferedReader br = new BufferedReader(new InputStreamReader(p)); String line; // 逐行读取输出到控制台 try { while ((line = br.readLine()) != null) { // System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java Web 中使用ffmpeg实现视频转码、视频截图
- Java Web 中使用ffmpeg实现视频转码、视频截图,javaffmpeg
- 在php中使用ffmpeg-php扩展对视频进行截图
- php使用ffmpeg-php扩展库进行视频截图
- 如何解决ASP使用FFMPEG进行视频截图时报出的“无法创建对象”问题
- 在mvc3中使用ffmpeg对上传视频进行截图和转换格式
- 使用FFMPEG进行一些视频处理(C#)视频合并、转码、获取时长
- 使用ffmpeg命令对视频文件进行截图
- android 使用 ffmpeg 进行视频转码(一)
- android 使用 ffmpeg 进行视频转码(二)
- windows下使用ffmpeg进行视频转码,图片拉取的Java测试代码
- 如何使用 FFmpeg 进行视频转码:字幕
- Java Web 中使用ffmpeg实现视频转码、视频截图
- php使用ffmpeg-php扩展库进行视频截图
- ffmpeg进行视频截图以及视频转换
- Linux下使用ffmpeg对视频截图
- 利用FFmpeg对视频进行转码压缩
- 使用ffmpeg对视频进行TS切片
- 使用ffmpeg可以生成视频截图
- python 调用系统ffmpeg进行视频截图,并进行图片http发送