如何優(yōu)雅的用java實(shí)現(xiàn)視頻轉(zhuǎn)碼

  1. 開源項(xiàng)目 JAVE (Java Audio Video Encoder)
  2. 引入依賴
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
    <version>2.7.2</version>
</dependency>
  1. 編碼測(cè)試
package test;

import java.io.File;
import ws.schild.jave.AudioAttributes;
import ws.schild.jave.AudioInfo;
import ws.schild.jave.Encoder;
import ws.schild.jave.EncodingAttributes;
import ws.schild.jave.MultimediaInfo;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.VideoAttributes;
import ws.schild.jave.VideoInfo;
import ws.schild.jave.VideoSize;

public class Test {
    
    public static void main(String[] args) throws Exception {
        
        File source = new File("d:/source.mp4");
        File target = new File("d:/target.mp4");
        
        System.out.println("源視頻信息");
        MultimediaObject object = new MultimediaObject(source);
        MultimediaInfo info = object.getInfo();
        System.out.println("格式format:" + info.getFormat());
        System.out.println("時(shí)長(zhǎng)duration:" + info.getDuration());
        VideoInfo videoInfo = info.getVideo();
        System.out.println("編碼decoder:" + videoInfo.getDecoder());
        System.out.println("碼率bitRate:" + videoInfo.getBitRate());
        System.out.println("幀率frameRate:" + videoInfo.getFrameRate());
        VideoSize videoSize = videoInfo.getSize();
        System.out.println("分辨率:" + videoSize.getWidth() + " x " + videoSize.getHeight());
        AudioInfo audioInfo = info.getAudio();
        System.out.println("編碼decoder:" + audioInfo.getDecoder());
        System.out.println("碼率bitRate:" + audioInfo.getBitRate());
        System.out.println("聲道channels:" + audioInfo.getChannels());
        System.out.println("采樣率samplingRate:" + audioInfo.getSamplingRate());
        
        // 視頻屬性
        VideoAttributes video = new VideoAttributes();
        video.setCodec("libx264");
        video.setBitRate(256000); // 碼率:256kbps
        video.setFrameRate(25); // 幀率:25fps
        int width = 640; // 固定寬度
        int height = width * videoSize.getHeight() / videoSize.getWidth();
        height = height%2==0 ? height : height+1; // 視頻寬高必須是偶數(shù)
        video.setSize(new VideoSize(width, height));
        // 音頻屬性
        AudioAttributes audio = new AudioAttributes();
        audio.setCodec("aac");
        audio.setBitRate(64000); // 碼率:64kbps
        audio.setSamplingRate(24000); // 采樣率:24kHz
        // 轉(zhuǎn)碼屬性
        EncodingAttributes attributes = new EncodingAttributes();
        attributes.setVideoAttributes(video);
        attributes.setAudioAttributes(audio);
        attributes.setFormat("mp4");

        Encoder encoder = new Encoder();
        encoder.encode(object, target, attributes);
        
        System.out.println("轉(zhuǎn)碼完成:新分辨率:" + width + " x " + height);
    }
    
}
  1. 測(cè)試結(jié)果
源視頻信息
格式format:mov
時(shí)長(zhǎng)duration:268280
編碼decoder:h264 (Main) (avc1 / 0x31637661)
碼率bitRate:500000
幀率frameRate:25.0
分辨率:768 x 432
編碼decoder:aac (LC) (mp4a / 0x6134706D)
碼率bitRate:96000
聲道channels:2
采樣率samplingRate:44100

轉(zhuǎn)碼完成:新分辨率:640 x 360

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末从祝,一起剝皮案震驚了整個(gè)濱河市劣针,隨后出現(xiàn)的幾起案子捻撑,更是在濱河造成了極大的恐慌裸违,老刑警劉巖创肥,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磨淌,死亡現(xiàn)場(chǎng)離奇詭異琐驴,居然都是意外死亡饭冬,警方通過查閱死者的電腦和手機(jī)灾馒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門茎用,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睬罗,你說我怎么就攤上這事轨功。” “怎么了容达?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵古涧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我花盐,道長(zhǎng)蒿褂,這世上最難降的妖魔是什么圆米? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮啄栓,結(jié)果婚禮上娄帖,老公的妹妹穿的比我還像新娘。我一直安慰自己昙楚,他們只是感情好近速,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堪旧,像睡著了一般削葱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淳梦,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天析砸,我揣著相機(jī)與錄音,去河邊找鬼爆袍。 笑死首繁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陨囊。 我是一名探鬼主播弦疮,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蜘醋!你這毒婦竟也來了胁塞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤压语,失蹤者是張志新(化名)和其女友劉穎啸罢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胎食,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扰才,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斥季。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片训桶。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡累驮,死狀恐怖酣倾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谤专,我是刑警寧澤躁锡,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站置侍,受9級(jí)特大地震影響映之,放射性物質(zhì)發(fā)生泄漏拦焚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一杠输、第九天 我趴在偏房一處隱蔽的房頂上張望赎败。 院中可真熱鬧,春花似錦蠢甲、人聲如沸僵刮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搞糕。三九已至,卻和暖如春曼追,著一層夾襖步出監(jiān)牢的瞬間窍仰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工礼殊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹吮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓膏燕,卻偏偏與公主長(zhǎng)得像钥屈,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坝辫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容