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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xuggler实现视频压缩_Xuggler视频处理简介

發(fā)布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xuggler实现视频压缩_Xuggler视频处理简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

xuggler實現(xiàn)視頻壓縮

注意:這是我們的“ Xuggler開發(fā)教程 ”系列的一部分。

隨著Internet中視頻的爆炸性增長,開發(fā)人員經(jīng)常需要在其應(yīng)用程序中操縱視頻內(nèi)容。 Xuggler是Java開發(fā)人員的免費開放源代碼庫,可用于實時解壓縮,處理和壓縮錄制的視頻或?qū)崟r視頻。 Xuggler在后臺使用了功能非常強大的FFmpeg媒體處理庫,實際上在它們周圍扮演著Java包裝器的角色。 這是從Java解壓縮,修改和重新壓縮任何媒體文件(或流)的簡單方法。

FFmpeg是一個完整的跨平臺解決方案,用于記錄,轉(zhuǎn)換和流式傳輸音頻和視頻,并支持多種格式。 即使您不知道它,也很可能已經(jīng)在計算機上使用它。 但是,Xuggler的用途不僅限于提供對復(fù)雜FFmpeg本機庫的輕松訪問。 Xuggler開發(fā)團(tuán)隊還不斷對FFmpeg進(jìn)行改進(jìn)。 您可以在Xuggle博客上找到最新消息,該博客中還發(fā)布了許多教程。 不要錯過那些家伙提供的過分簡單的互聯(lián)網(wǎng)視頻指南 。

讓我們繼續(xù)獲取FFmpeg。 請注意,Xuggler帶有其自己的(改進(jìn)的)FFmpeg版本,以避免配置錯誤,因此您不必手動獲取FFmpeg。 在此過程中,我們將在將控制權(quán)交給Xuggler之前直接使用FFmpeg進(jìn)行一些測試,因此您可能希望將原始版本作為單獨的可執(zhí)行文件使用。

轉(zhuǎn)到FFmpeg下載頁面并獲取最新發(fā)行版,當(dāng)時版本為0.6.1。 對于Linux,您可以從tarball下載源代碼并繼續(xù)進(jìn)行編譯。 但是在Windows中,您可能應(yīng)該獲得預(yù)編譯的二進(jìn)制文件。 我使用了Mplayer-win32提供的一個,可以從這里獲得。 您將在此處找到ffmpeg.exe可執(zhí)行文件。 將其復(fù)制到一個特定的文件夾中,如果您不想每次都寫完整的路徑,則選擇“ C:\ programs \ ffmpeg”,并選擇將ffmpeg.exe添加到系統(tǒng)路徑中。

要測試可執(zhí)行文件是否正常工作,請打開終端并在不帶參數(shù)的情況下運行它。 您應(yīng)該看到類似于以下的輸出:

FFmpeg版本SVN-r21231-Sherpya,版權(quán)所有(c)2000-2010 Fabrice Bellard等。
建于2010年1月16日05:42:31與gcc 4.2.5 20080919(預(yù)發(fā)行)[Sherpya] libavutil 50. 7. 0 / 50. 7. 0
libavcodec 52.47。 0 / 52.47。 0
libavformat 52.47。 0 / 52.47。 0
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.15。 0 / 1.15。 0
libswscale 0. 8. 0 / 0. 8. 0
libpostproc 51. 2. 0 / 51. 2. 0
超快速音頻和視頻編碼器
用法:ffmpeg [選項] [[infile選項] -i infile]…{[outfile選項] outfile}…

使用-h獲得完整的幫助,或者甚至更好地運行'man ffmpeg'

您也可以使用輸出建議的“ -h”開關(guān)來接收一堆冗長的參數(shù)和選項。 最好查看在線FFmpeg文檔 。

下一步是對您的第一個視頻進(jìn)行轉(zhuǎn)碼 ,可能是從預(yù)錄制的文件中轉(zhuǎn)碼 。 我的輸入文件是一個4分鐘20秒長的MP4視頻,大小為18.1MB,稱為“ myvideo.mp4”。 我想將其轉(zhuǎn)換為Flash視頻,從而大大降低其質(zhì)量。 使用FFmpeg可以很容易地通過發(fā)出以下命令來完成此操作(注意對路徑使用正斜杠):

ffmpeg.exe -i C:/myvideo.mp4 C:/myvideo.flv

控制臺輸出如下所示:

FFmpeg版本SVN-r21231-Sherpya,版權(quán)所有(c)2000-2010 Fabrice Bellard等。
建于2010年1月16日05:42:31與gcc 4.2.5 20080919(預(yù)發(fā)行)[Sherpya] libavutil 50. 7. 0 / 50. 7. 0
libavcodec 52.47。 0 / 52.47。 0
libavformat 52.47。 0 / 52.47。 0
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.15。 0 / 1.15。 0
libswscale 0. 8. 0 / 0. 8. 0
libpostproc 51. 2. 0 / 51. 2. 0

似乎流1編解碼器的幀速率與容器的幀速率不同:59.92(14981/250)-> 29.96(14981/500)
從'C:/myvideo.mp4'輸入#0,mov,mp4,m4a,3gp,3g2,mj2:
元數(shù)據(jù): major_brand:mp42 minor_version:0 兼容品牌:isomavc1mp42 持續(xù)時間:00:04:20.96,開始:0.000000,比特率:582 kb / s 流#0.0(und):音頻:aac,44100 Hz,立體聲,s16、115 kb / s 流#0.1(und):視頻:h264,yuv420p,480×270 [PAR 1:1 DAR 16:9],464 kb / s,29.96 fps,29.96 tbr,29962 tbn,59.92 tbc 輸出#0 flv到'C:/myvideo.flv': 流#0.0(und):視頻:flv,yuv420p,480×270 [PAR 1:1 DAR 16:9],q = 2-31,200 kb / s,1k tbn,29.96 tbc 流#0.1(und):音頻:libmp3lame,44100 Hz,立體聲,s16,64 kb / s 流映射: 流#0.1->#0.0 流#0.0->#0.1 按[q]停止編碼 [libmp3lame @ 0038f3a0] lame:輸出緩沖區(qū)太小(緩沖區(qū)索引:9404,可用字節(jié):388) 音頻編碼失敗

忽略“音頻編碼失敗”消息,沒有錯誤。 結(jié)果是一個不錯的,可播放的FLV文件,名為“ myvideo.flv”,大小為10.1MB。

太酷了,讓我們繼續(xù)安裝Xuggler。 首先,我們從Xuggler下載頁面獲取最新版本。 如此處所述:

Xuggler由兩個主要部分組成; 一組Java jar文件和一組本機共享庫(Windows上的.dll文件,Linux上的.so文件或Mac上的.dylib文件)。 要使用它,您需要先安裝本機庫,然后才能編寫使用Xuggler的程序。

確保下載與操作系統(tǒng)的體系結(jié)構(gòu)和Java版本匹配的正確文件。 例如,我下載了Windows的32位(對于Windows沒有64位),Java 1.5或更高版本,它基本上是一個安裝程序。

您可以在下載頁面中找到有關(guān)如何安裝本機庫的說明。 對于Windows,您可以卸載任何以前的版本,然后運行安裝程序,當(dāng)然還要重新啟動計算機 。 還有一個視頻介紹了如何在Microsoft Windows上安裝Xuggler 。 重新啟動后,讓我們測試安裝是否成功。 首先,我們檢查Xuggle路徑變量是否已設(shè)置:

C:\>回聲%XUGGLE_HOME%
C:\ Program檔案(x86)\ Xuggle

路徑已正確設(shè)置。 請注意,Xuggler FFmpeg可執(zhí)行文件位于“%XUGGLE_HOME%/ bin”文件夾中。

讓我們通過發(fā)出以下命令來播放我們的第一個視頻(將“ c:/myvideo.mp4”替換為您的文件):

java -cp“%XUGGLE_HOME%\ share \ java \ jars \ xuggle-xuggler.jar” com.xuggle.xuggler.demos.DecodeAndPlayVideo c:/myvideo.mp4

是時候使用Xuggler編寫我們的第一個代碼了。 我們將檢查視頻文件,找出其媒體容器,并打印出內(nèi)容摘要。 同時,將Xuggle API Javadocs加入書簽,以備將來參考。

啟動您喜歡的IDE,創(chuàng)建一個新項目,然后導(dǎo)入在“%XUGGLE_HOME%/ share / java / jars”文件夾中找到的所有JAR文件。 該示例類似于如何在Eclipse中編寫您的第一個Xuggler應(yīng)用程序一文中提供的示例。

package com.javacodegeeks.xuggler.intro;import com.xuggle.xuggler.ICodec; import com.xuggle.xuggler.IContainer; import com.xuggle.xuggler.IStream; import com.xuggle.xuggler.IStreamCoder;public class VideoInfo {private static final String filename = "c:/myvideo.mp4";public static void main(String[] args) {// first we create a Xuggler container objectIContainer container = IContainer.make();// we attempt to open up the containerint result = container.open(filename, IContainer.Type.READ, null);// check if the operation was successfulif (result<0)throw new RuntimeException("Failed to open media file");// query how many streams the call to open foundint numStreams = container.getNumStreams();// query for the total durationlong duration = container.getDuration();// query for the file sizelong fileSize = container.getFileSize();// query for the bit ratelong bitRate = container.getBitRate();System.out.println("Number of streams: " + numStreams);System.out.println("Duration (ms): " + duration);System.out.println("File Size (bytes): " + fileSize);System.out.println("Bit Rate: " + bitRate);// iterate through the streams to print their meta datafor (int i=0; i<numStreams; i++) {// find the stream objectIStream stream = container.getStream(i);// get the pre-configured decoder that can decode this stream;IStreamCoder coder = stream.getStreamCoder();System.out.println("*** Start of Stream Info ***");System.out.printf("stream %d: ", i);System.out.printf("type: %s; ", coder.getCodecType());System.out.printf("codec: %s; ", coder.getCodecID());System.out.printf("duration: %s; ", stream.getDuration());System.out.printf("start time: %s; ", container.getStartTime());System.out.printf("timebase: %d/%d; ",stream.getTimeBase().getNumerator(),stream.getTimeBase().getDenominator());System.out.printf("coder tb: %d/%d; ",coder.getTimeBase().getNumerator(),coder.getTimeBase().getDenominator());System.out.println();if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) {System.out.printf("sample rate: %d; ", coder.getSampleRate());System.out.printf("channels: %d; ", coder.getChannels());System.out.printf("format: %s", coder.getSampleFormat());} else if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) {System.out.printf("width: %d; ", coder.getWidth());System.out.printf("height: %d; ", coder.getHeight());System.out.printf("format: %s; ", coder.getPixelType());System.out.printf("frame-rate: %5.2f; ", coder.getFrameRate().getDouble());}System.out.println();System.out.println("*** End of Stream Info ***");}}}

我們首先獲得一個IContainer實例,該實例是一個數(shù)據(jù)源,其中包含一個或多個音頻和視頻數(shù)據(jù)流。 然后,我們嘗試打開媒體文件并使其可供讀取。 如果操作成功,我們可以輕松檢索信息,例如包含的流數(shù) , 總持續(xù)時間 , 文件大小和比特率 。

請注意,此信息響應(yīng)容器本身。 但是,我們可以獲得有關(guān)容器組成的各個流的元數(shù)據(jù)。 我們使用getStream方法來引用相應(yīng)的流,然后使用IstreamCoder(它是可以解碼特定流的解碼器)。 從該對象中,我們可以找到流的編解碼器類型 , 編解碼器ID和其他信息。

最后,我們能夠區(qū)分音頻和視頻流。 對于音頻流,我們可以找到使用的采樣率 , 通道數(shù)和音頻采樣格式 。 同樣,對于視頻流,我們可以獲得尺寸( 寬度和高度 ), 像素格式和幀速率 。

樣本輸出如下所示:

流數(shù):2
持續(xù)時間(毫秒):260963888
檔案大小(位元組):19007074
比特率:582672
***開始流信息***
流0:類型:CODEC_TYPE_AUDIO; 編解碼器:CODEC_ID_AAC; 持續(xù)時間:11507712; 開始時間:0; 時基:1/44100; 編碼器tb:1/44100;
采樣率:44100; 頻道:2; 格式:FMT_S16
***流信息結(jié)束***
***開始流信息***
流1:類型:CODEC_TYPE_VIDEO; 編解碼器:CODEC_ID_H264; 持續(xù)時間:7819000; 開始時間:0; 時基:1/29962; 編碼器tb:250/14981;
寬度:480; 高度:270; 格式:YUV420P; 幀頻:29.96;
***流信息結(jié)束***

伙計們。 Xuggler的視頻處理軟件簡介。 與往常一樣,您可以下載為本教程創(chuàng)建的Eclipse項目 。

在接下來的教程中,我將向您展示Xuggler和FFmpeg可以完成的一些更酷的工作,例如視頻轉(zhuǎn)換和修改。 因此,請繼續(xù)關(guān)注JavaCodeGeeks ! 別忘了分享!

相關(guān)文章:

  • 使用wowza和xuggler將RTMP轉(zhuǎn)為RTSP
  • Xuggler教程:轉(zhuǎn)碼和媒體修改
  • Xuggler教程:幀捕獲和視頻創(chuàng)建
  • 使用VirtualBox在PC上安裝Android OS

翻譯自: https://www.javacodegeeks.com/2011/02/introduction-xuggler-video-manipulation.html

xuggler實現(xiàn)視頻壓縮

總結(jié)

以上是生活随笔為你收集整理的xuggler实现视频压缩_Xuggler视频处理简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。