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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM