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

posted @ 2019-03-13 15:07  马革皮  阅读(5819)  评论(0编辑  收藏  举报