From 62774e3ec9a334dcff82bf63b90ec067b06fc305 Mon Sep 17 00:00:00 2001 From: czt <czt18638530771@163.com> Date: 星期二, 25 三月 2025 16:37:43 +0800 Subject: [PATCH] 优化质检信息同步 --- src/main/java/com/fzzy/web/TestController.java | 192 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 188 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/fzzy/web/TestController.java b/src/main/java/com/fzzy/web/TestController.java index 9d3d200..4c128c0 100644 --- a/src/main/java/com/fzzy/web/TestController.java +++ b/src/main/java/com/fzzy/web/TestController.java @@ -1,4 +1,5 @@ package com.fzzy.web; + import com.bstek.dorado.util.DateUtils; import com.fzzy.api.data.ApiParam; import com.fzzy.async.fzzy30.Fzzy30SyncService12; @@ -8,6 +9,21 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; +import ws.schild.jave.Encoder; +import ws.schild.jave.EncoderException; +import ws.schild.jave.MultimediaObject; +import ws.schild.jave.encode.AudioAttributes; +import ws.schild.jave.encode.EncodingAttributes; +import ws.schild.jave.encode.VideoAttributes; +import ws.schild.jave.info.AudioInfo; +import ws.schild.jave.info.VideoSize; + + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.math.BigDecimal; /** * @author vince.xu @@ -22,23 +38,191 @@ public class TestController { @Autowired private Fzzy30SyncService12 fzzySyncService12; + /** * */ @RequestMapping(value = "test", method = RequestMethod.GET) - public String test(@RequestParam(name = "kqdm")String kqdm, @RequestParam(name = "deptId")String deptId, @RequestParam(name = "start")String start,@RequestParam(name = "end") String end) { + public String test(@RequestParam(name = "kqdm") String kqdm, @RequestParam(name = "deptId") String deptId, @RequestParam(name = "start") String start, @RequestParam(name = "end") String end) { try { ApiParam apiParam = new ApiParam(); apiParam.setKqdm(kqdm); apiParam.setDeptId(deptId); - apiParam.setStart(DateUtils.parse("yyyy-MM-dd HH:mm:ss",start)); - apiParam.setEnd(DateUtils.parse("yyyy-MM-dd HH:mm:ss",end)); + apiParam.setStart(DateUtils.parse("yyyy-MM-dd HH:mm:ss", start)); + apiParam.setEnd(DateUtils.parse("yyyy-MM-dd HH:mm:ss", end)); fzzySyncService12.syncData(apiParam); } catch (Exception e) { - log.error(e.getMessage(),e); + log.error(e.getMessage(), e); e.printStackTrace(); } return ""; } + + + public static void main(String[] args) throws EncoderException { + // 鍘嬬缉鍓嶆枃浠惰矾寰� + File source = new File("D:\\IGDS\\FILE\\COMMON\\202412\\20241218100601.mp4"); + // 鍘嬬缉鍚庣殑鏂囦欢璺緞 + File target = new File("D:\\IGDS\\FILE\\COMMON\\202412\\202412181006.mp4"); + compre(source, target, 1); + + } + + /** + * 瑙嗛鍘嬬缉 + * + * @param source 婧愭枃浠� + * @param target 鐩爣鏂囦欢 + * @param rate 鍘嬬缉姣� + */ + public static void compre(File source, File target, Integer rate) throws EncoderException { + try { + System.out.println("---------------寮�濮嬪帇缂�---------------"); + long start = System.currentTimeMillis(); + + // 闊抽缂栫爜灞炴�ч厤缃� + AudioAttributes audio = new AudioAttributes(); + audio.setCodec("libmp3lame"); + // 璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 56000 = 56kb) + // audio.setBitRate(new Integer(56_000)); + audio.setBitRate(new Integer(10)); + // 璁剧疆閲嶆柊缂栫爜鐨勯煶棰戞祦涓娇鐢ㄧ殑澹伴亾鏁帮紙1 =鍗曞0閬擄紝2 = 鍙屽0閬擄紙绔嬩綋澹帮級锛� + audio.setChannels(1); + // 閲囨牱鐜囪秺楂樺0闊崇殑杩樺師搴﹁秺濂斤紝鏂囦欢瓒婂ぇ + // audio.setSamplingRate(new Integer(44100)); + audio.setSamplingRate(new Integer(22050)); + // 瑙嗛缂栫爜灞炴�ч厤缃� + VideoAttributes video = new VideoAttributes(); + // 璁剧疆缂栫爜 + video.setCodec("mpeg4"); + //璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 5600000 = 5600kb) + // video.setBitRate(new Integer(5_600_000 / rate)); + video.setBitRate(new Integer(10 / rate)); + + // 璁剧疆瑙嗛甯х巼锛堝抚鐜囪秺浣庯紝瑙嗛浼氬嚭鐜版柇灞傦紝瓒婇珮璁╀汉鎰熻瓒婅繛缁級,杩欓噷 闄�1000鏄负浜嗗崟浣嶈浆鎹� + video.setFrameRate(new Integer(15)); + + + // 缂栫爜璁剧疆 + EncodingAttributes attr = new EncodingAttributes(); + attr.setOutputFormat("mp4"); + attr.setAudioAttributes(audio); + attr.setVideoAttributes(video); + + // 璁剧疆鍊肩紪鐮� + Encoder ec = new Encoder(); + ec.encode(new MultimediaObject(source), target, attr); + + + System.out.println("---------------缁撴潫鍘嬬缉---------------"); + long end = System.currentTimeMillis(); + System.out.println("鍘嬬缉鍓嶅ぇ灏忥細" + source.length() + " 鍘嬬缉鍚庡ぇ灏忥細" + target.length()); + System.out.println("鍘嬬缉鑰楁椂锛�" + (end - start)); + + } catch (EncoderException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + + } + + /** + * 浼犺棰慒ile瀵硅薄锛堣繖鏄竴涓叿浣撶殑鏂囦欢锛夛紝杩斿洖鍘嬬缉鍚嶧ile瀵硅薄淇℃伅 + * + * @param source + */ + public static File compressionVideo(File source, String picName) { + if (source == null) { + return null; + } + String newPath = source.getAbsolutePath().substring(0, source.getAbsolutePath().lastIndexOf(File.separator)).concat(File.separator).concat(picName); + File target = new File(newPath); + try { + MultimediaObject object = new MultimediaObject(source); + AudioInfo audioInfo = object.getInfo().getAudio(); + // 鏍规嵁瑙嗛澶у皬鏉ュ垽鏂槸鍚﹂渶瑕佽繘琛屽帇缂�, + int maxSize = 5; + double mb = Math.ceil(source.length() / 1048576); + int second = (int) object.getInfo().getDuration() / 1000; + BigDecimal bd = new BigDecimal(String.format("%.4f", mb / second)); + System.out.println("寮�濮嬪帇缂╄棰戜簡--> 瑙嗛姣忕骞冲潎 " + bd + " MB "); + // 瑙嗛 > 5MB, 鎴栬�呮瘡绉� > 0.5 MB 鎵嶅仛鍘嬬缉锛� 涓嶉渶瑕佺殑璇濆彲浠ユ妸鍒ゆ柇鍘绘帀 + boolean temp = mb > maxSize || bd.compareTo(new BigDecimal(0.5)) > 0; +// if(temp){ + long time = System.currentTimeMillis(); + //TODO 瑙嗛灞炴�ц缃� + int maxBitRate = 128000; + int maxSamplingRate = 44100; + int bitRate = 800000; + int maxFrameRate = 20; + int maxWidth = 1280; + + AudioAttributes audio = new AudioAttributes(); + // 璁剧疆閫氱敤缂栫爜鏍煎紡10 audio.setCodec("aac"); + // 璁剧疆鏈�澶у�硷細姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ + // 璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 128000 = 182kb) + if (audioInfo.getBitRate() > maxBitRate) { + audio.setBitRate(new Integer(maxBitRate)); + } + + // 璁剧疆閲嶆柊缂栫爜鐨勯煶棰戞祦涓娇鐢ㄧ殑澹伴亾鏁帮紙1 =鍗曞0閬擄紝2 = 鍙屽0閬擄紙绔嬩綋澹帮級锛夈�傚鏋滄湭璁剧疆浠讳綍澹伴亾鍊硷紝鍒欑紪鐮佸櫒灏嗛�夋嫨榛樿鍊� 0銆� + audio.setChannels(audioInfo.getChannels()); + // 閲囨牱鐜囪秺楂樺0闊崇殑杩樺師搴﹁秺濂斤紝鏂囦欢瓒婂ぇ + // 璁剧疆闊抽閲囨牱鐜囷紝鍗曚綅锛氳但鍏� hz + // 璁剧疆缂栫爜鏃跺�欑殑闊抽噺鍊硷紝鏈缃负0,濡傛灉256锛屽垯闊抽噺鍊间笉浼氭敼鍙� + // audio.setVolume(256); + if (audioInfo.getSamplingRate() > maxSamplingRate) { + audio.setSamplingRate(maxSamplingRate); + } + + //TODO 瑙嗛缂栫爜灞炴�ч厤缃� + ws.schild.jave.info.VideoInfo videoInfo = object.getInfo().getVideo(); + VideoAttributes video = new VideoAttributes(); + video.setCodec("h264"); + //璁剧疆闊抽姣旂壒鐜�,鍗曚綅:b (姣旂壒鐜囪秺楂橈紝娓呮櫚搴�/闊宠川瓒婂ソ锛屽綋鐒舵枃浠朵篃灏辫秺澶� 800000 = 800kb) + if (videoInfo.getBitRate() > bitRate) { + video.setBitRate(bitRate); + } + + // 瑙嗛甯х巼锛�15 f / s 甯х巼瓒婁綆锛屾晥鏋滆秺宸� + // 璁剧疆瑙嗛甯х巼锛堝抚鐜囪秺浣庯紝瑙嗛浼氬嚭鐜版柇灞傦紝瓒婇珮璁╀汉鎰熻瓒婅繛缁級锛岃棰戝抚鐜囷紙Frame rate锛夋槸鐢ㄤ簬娴嬮噺鏄剧ず甯ф暟鐨勯噺搴︺�傛墍璋撶殑娴嬮噺鍗曚綅涓烘瘡绉掓樉绀哄抚鏁�(Frames per Second锛岀畝锛欶PS锛夋垨鈥滆但鍏光�濓紙Hz锛夈�� + if (videoInfo.getFrameRate() > maxFrameRate) { + video.setFrameRate(maxFrameRate); + } + + // 闄愬埗瑙嗛瀹介珮 + int width = videoInfo.getSize().getWidth(); + int height = videoInfo.getSize().getHeight(); + if (width > maxWidth) { + float rat = (float) width / maxWidth; + video.setSize(new VideoSize(maxWidth, (int) (height / rat))); + } + + EncodingAttributes attr = new EncodingAttributes(); +// attr.setFormat("mp4"); + attr.setAudioAttributes(audio); + attr.setVideoAttributes(video); + + // 閫熷害鏈�蹇殑鍘嬬缉鏂瑰紡锛� 鍘嬬缉閫熷害 浠庡揩鍒版參锛� ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo. +// attr.setPreset(PresetUtil.VERYFAST); +// attr.setCrf(27); +// // 璁剧疆绾跨▼鏁� +// attr.setEncodingThreads(Runtime.getRuntime().availableProcessors()/2); + + Encoder encoder = new Encoder(); + encoder.encode(new MultimediaObject(source), target, attr); + System.out.println("鍘嬬缉鎬昏�楁椂锛�" + (System.currentTimeMillis() - time) / 1000); + return target; +// } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (target.length() > 0) { + source.delete(); + } + } + return source; + } } -- Gitblit v1.9.3