日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ffmpeg入门及java操作ffmpeg对视频进行处理

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ffmpeg入门及java操作ffmpeg对视频进行处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.ffmpeg

1.簡介

FFmpeg是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據你選擇的組件)。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多codec都是從頭開發的。

FFmpeg在Linux平臺下開發,但它同樣也可以在其它操作系統環境中編譯運行,包括Windows、Mac OS X等。

多媒體視頻處理工具FFmpeg有非常強大的功能,包括視頻采集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。

ffmpeg在windows下的視頻采集

在windows下關于ffmpeg視頻采集的資料非常少,但是ffmpeg還是支持windows下視頻采集的。ffmpeg支持windows下video for windows(VFW)設備的視頻采集,不過VFW設備已經過時,正在被WDM的視頻設備所取代,但是ffmpeg還沒有支持WDM的計劃,不過好像有將WDM轉為VFW的工具,因此ffmpeg還是可以在windows下進行視頻采集的。

視頻格式轉換功能

ffmpeg視頻轉換功能。視頻格式轉換,比如可以將多種視頻格式轉換為flv格式,可不是視頻信號轉換 。

ffmpeg可以輕易地實現多種視頻格式之間的相互轉換(wma,rm,avi,mod等),例如可以將攝錄下的視頻avi等轉成現在視頻網站所采用的flv格式。

視頻截圖功能

對于選定的視頻,截取指定時間的縮略圖。視頻抓圖,獲取靜態圖和動態圖,不提倡抓gif文件;因為抓出的gif文件大而播放不流暢

給視頻加水印功能

使用ffmpeg 視頻添加水印(logo)。

2.mac下安裝ffmpeg

(2)先安裝Homebrew

終端下直接輸入以下命令即可:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

(2)安裝ffmpeg

終端下直接輸入以下命令即可:

brew install ffmpeg

安裝后輸入ffmpeg命令

?

3.ffmpeg常用命令

將視頻 MP4 轉化為 GIF ffmpeg -i small.mp4 small.gif 轉化視頻中的一部分為 GIF ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif 從視頻中第二秒開始,截取時長為3秒的片段轉化為 gif ? 轉化高質量 GIF 默認轉化是中等質量模式,若要轉化出高質量的 gif,可以修改比特率 ? 視頻屬性調整 ffmpeg -i small.mp4 -b 2048k small.gif ? 縮放視頻尺寸 ffmpeg -i big.mov -vf scale=360:-1 small.mov 注意 sacle 值必須是偶數,這里的 -1 表示保持長寬比,根據寬度值自適應高度。 ? 如果要求壓縮出來的視頻尺寸長寬都保持為偶數,可以使用 -2 ? 加倍速播放視頻 ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov ? 定義幀率 16fps ffmpeg -i input.mov -r 16 -filter:v "setpts=0.125*PTS" -an output.mov ? 慢倍速播放視頻 ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov ? 靜音視頻(移除視頻中的音頻) ffmpeg -i input.mov -an mute-output.mov -an 就是禁止音頻輸出 ? 將 GIF 轉化為 MP4 ffmpeg -f gif -i animation.gif animation.mp4 ? 也可以將 gif 轉為其他視頻格式 ffmpeg -f gif -i animation.gif animation.mpeg ffmpeg -f gif -i animation.gif animation.webm ? 將視頻中的音頻換成另一個音頻 ffmpeg -i odd.mp4 -i bgm.mp3 -t 7 -y new.mp4 將odd.mp4中的音頻換成bgm.mp3,視頻長度為7秒,保存為一個新文件new.mp4 ? 獲取 GIF 的第一幀圖片 使用 ImageMagick 可以方便第提取 gif 圖片的第 N 幀圖像。 安裝 ImageMagick brew install imagemagick 提取第一幀 convert 'animation.gif[0]' animation-first-frame.gif 通過 [0] 就可以提取出 gif 的第一幀圖像。

二.java操作ffmpeg處理視頻

由于使用ffmpeg需要在cmd或者終端中執行shell命令,java的JDK里面提供了一個類ProcessBuilder,來幫助我們去執行指定的shell腳本,達到對應的目的。

1.ProcessBuilder介紹

通過Java執行系統命令,與cmd中或者終端上一樣執行shell命令,最典型的用法就是使用Runtime.getRuntime().exec(command)或者new ProcessBuilder(cmdArray).start()。從JDK1.5開始,官方提供并推薦使用ProcessBuilder類進行shell命令操作。

使用ProcessBuilder很簡單,只需要通過Arrays.asList()構建一個List的參數集合,然后在ProcessBuilder的構造函數傳入參數,即可 start()方法執行

2.java操作ffmpeg代碼示例

public class MergeVideoMp3 { ?private String ffmpegEXE; ?public MergeVideoMp3(String ffmpegEXE) {super();this.ffmpegEXE = ffmpegEXE;} ?/*** 將視頻中的音頻替換為指定音頻** @param videoInputPath* @param mp3InputPath* @param seconds* @param videoOutputPath* @throws Exception*/public void convertor(String videoInputPath, String mp3InputPath,double seconds, String videoOutputPath) throws Exception { // ffmpeg.exe -i odd.mp4 -i bgm.mp3 -t 7 -y new.mp4List<String> command = new ArrayList<>();command.add(ffmpegEXE); ?command.add("-i");command.add(videoInputPath); ?command.add("-i");command.add(mp3InputPath); ?command.add("-t");command.add(String.valueOf(seconds)); ?command.add("-y");command.add(videoOutputPath); ?InputStream errorStream = null;InputStreamReader inputStreamReader = null;BufferedReader br = null;try {ProcessBuilder builder = new ProcessBuilder(command);Process process = builder.start(); ?errorStream = process.getErrorStream();inputStreamReader = new InputStreamReader(errorStream);br = new BufferedReader(inputStreamReader); ?while (br.readLine() != null) {}} finally {if (br != null) {br.close();}if (inputStreamReader != null) {inputStreamReader.close();}if (errorStream != null) {errorStream.close();}}} ?public static void main(String[] args) {//參數為ffmpeg啟動命令的路徑。在bin目錄中MergeVideoMp3 ffmpeg = new MergeVideoMp3("/usr/local/Cellar/ffmpeg/4.1.4/bin/ffmpeg");try {ffmpeg.convertor("/Users/apple/workspace//video-file/180425CFA4RB6T0H/video/test.mp4", "/Users/apple/workspace//video-file/bgm/11796.mp3", 7.1, "/Users/apple/workspace//video-file/180425CFA4RB6T0H/video/test222.mp4");} catch (Exception e) {e.printStackTrace();}} ? }

?

總結

以上是生活随笔為你收集整理的ffmpeg入门及java操作ffmpeg对视频进行处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。