zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    代办事项
    问题总结2015/05/05
    Android Studio 更新
    Android 防内存泄露handler
    android canvas 绘图笔记
    Android Studio compile error : enum constant INSTANT_RUN_REPLACEMENT does not exist in class
    android Studio 配置LUA 开发环境
    Android 性能优化之(1)-MAT使用教程
    shareSdk打包报错解决办法
    Android 事件分发机制
  • 原文地址:https://www.cnblogs.com/magepi/p/10523250.html
Copyright © 2011-2022 走看看