ffmpeg截取视频
FFmpeg是什么
ffmpeg是一套优秀的操作音视频的开源计算机程序,有包括视频采集,视频格式转换,视频抓图等强大功能
常用参数
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频
常用命令
// 去掉视频中的音频 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 // -an: 去掉音频;-vcodec:视频选项,一般后面加copy表示拷贝 // 提取视频中的音频 ffmpeg -i input.mp4 -acodec copy -vn output.mp3 // -vn: 去掉视频;-acodec: 音频选项, 一般后面加copy表示拷贝 // 音视频合成 ffmpeg -y –i input.mp4 –i input.mp3 –vcodec copy –acodec copy output.mp4 // -y 覆盖输出文件 //剪切视频 ffmpeg -ss 0:1:30 -t 0:0:20 -i input.mp4 -vcodec copy -acodec copy output.mp4 // -ss 开始时间; -t 持续时间 // 视频截图 ffmpeg –i test.mp4 –f image2 -t 0.001 -s 320x240 image-%3d.jpg // -s 设置分辨率; -f 强迫采用格式fmt; // 视频分解为图片 ffmpeg –i test.mp4 –r 1 –f image2 image-%3d.jpg // -r 指定截屏频率 // 将图片合成视频 ffmpeg -f image2 -i image%d.jpg output.mp4 //视频拼接 ffmpeg -f concat -i filelist.txt -c copy output.mp4 // 将视频转为gif ffmpeg -i input.mp4 -ss 0:0:30 -t 10 -s 320x240 -pix_fmt rgb24 output.gif // -pix_fmt 指定编码 // 将视频前30帧转为gif ffmpeg -i input.mp4 -vframes 30 -f gif output.gif // 旋转视频 ffmpeg -i input.mp4 -vf rotate=PI/2 output.mp4 // 缩放视频 ffmpeg -i input.mp4 -vf scale=iw/2:-1 output.mp4 // iw 是输入的宽度, iw/2就是一半;-1 为保持宽高比 //视频变速 ffmpeg -i input.mp4 -filter:v setpts=0.5*PTS output.mp4 //音频变速 ffmpeg -i input.mp3 -filter:a atempo=2.0 output.mp3 //音视频同时变速,但是音视频为互倒关系 ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4 // 视频添加水印 ffmpeg -i input.mp4 -i logo.jpg -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -map 0:a -codec:a copy output.mp4 // main_w-overlay_w-10 视频的宽度-水印的宽度-水印边距;
那么我要实验上面的两个命令 1.视频截图 2.剪切视频
这两个命令我吸取一些其他人的经验然后改写的
即获取视频任一帧图片and截取视频某一段,首先需要下载ffmpeg,这个可以去官网下载
这是视频操作demo
ConvertVideo
package com.pskj.JXGSLZ.utils.video; /** * * @date 2019/3/13 * ffmpeg操作视频 */ public class ConvertVideo { //原视频地址 private final static String INPUTPATH = "F:\\video\\2018.mp4"; //截取视频输出位置 private final static String OUTPATH = "F:\\video\\"; //ffmpeg运行文件 private final static String FFMPEGPATH = "F:\\video\\ffmpeg\\ffmpeg-20181114-1096614-win64-static\\bin\\ffmpeg.exe "; //截取视频的某一段 public static void convertVideo(){ try { //Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令 Runtime runtime = Runtime.getRuntime(); //执行命令 String cut = FFMPEGPATH + " -i " + INPUTPATH + " -vcodec copy -acodec copy -ss 00:00:00 -to 00:00:15 " + OUTPATH +"test"+ ".mp4 -y"; runtime.exec(cut); } catch (Exception e) { e.printStackTrace(); } } //截取视频中的某一帧 public static void convertImg(){ try { //Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令 Runtime runtime = Runtime.getRuntime(); //执行命令 String cut = FFMPEGPATH + " -i " + INPUTPATH + " -y -f image2 -ss 20 -s 700x525 " + OUTPATH +"test"+ ".jpg"; runtime.exec(cut); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { convertImg();//截取视频帧 convertVideo();//剪切视频 } }
存放原视频和ffmpeg程序的地方
视频的时长
运行主方法
ConvertVideo中截取的视频帧是第一秒,截取视频段为0至15秒
以下为参考链接
https://blog.csdn.net/huangxingli/article/details/46663143
https://blog.csdn.net/zhangminemail/article/details/79931974