Commit 7715ebec authored by yanzg's avatar yanzg

视频压缩

parent 259d179a
......@@ -130,7 +130,7 @@ public class MediaParameter extends BaseVo {
* @return
*/
public int getAudioBitRateFinally() {
return Math.max(this.minAudioBitRate, (int) (this.audioBitRate * this.audioBitRateZip));
return getMinValue(this.minAudioBitRate, this.audioBitRate, this.audioBitRateZip);
}
/**
......@@ -139,7 +139,7 @@ public class MediaParameter extends BaseVo {
* @return
*/
public int getVideoBitRateFinally() {
return Math.max(this.minVideoBitRate, (int) (this.videoBitRate * this.videoBitRateZip));
return getMinValue(this.minVideoBitRate, this.videoBitRate, this.videoBitRateZip);
}
/**
......@@ -161,10 +161,46 @@ public class MediaParameter extends BaseVo {
}
private int getWidthHeightFinally(boolean width) {
// 最大宽度和最大高度
int maxWidth = Math.max(this.videoWidth, this.videoHeight);
int maxHeight = Math.min(this.videoWidth, this.videoHeight);
// 获取允许的最小宽度和高度
int minWidth = Math.max(this.minVideoWidth, this.minVideoHeight);
int minHeight = Math.min(this.minVideoWidth, this.minVideoHeight);
// 计算最小宽度和高度
int calcMinWidth = maxWidth * minHeight / maxHeight;
int calcMinHeight = maxHeight * minWidth / maxWidth;
// 设置最小的宽高
if (minWidth == 0) {
minWidth = calcMinWidth;
calcMinHeight = minHeight;
}
if (minHeight == 0) {
minHeight = calcMinHeight;
calcMinWidth = minWidth;
}
// 判断宽高比列
if (calcMinHeight > minHeight) {
minHeight = calcMinHeight;
} else {
minWidth = calcMinWidth;
}
if (width) {
return Math.max(this.minVideoWidth, (int) (this.videoWidth * this.videoSizeZip));
int minValue = this.videoWidth > this.videoHeight ? minWidth : minHeight;
return getMinValue(minValue, this.videoWidth, this.videoSizeZip);
} else {
int minValue = this.videoWidth < this.videoHeight ? minWidth : minHeight;
return getMinValue(minValue, this.videoHeight, this.videoSizeZip);
}
}
private int getMinValue(int min, int from, float zip) {
if (from < min) {
return from;
} else {
return Math.max(this.minVideoHeight, (int) (this.videoHeight * this.videoSizeZip));
return Math.max(min, (int) (from * zip));
}
}
......@@ -271,16 +307,67 @@ public class MediaParameter extends BaseVo {
// recorder.setVideoQuality(this.videoBitRateZip);
}
public void initZipMp4() {
this.initMp4();
/**
* 设置最小压缩比特率
*/
public void initZipBitrate() {
// 设置视频压缩率
this.audioBitRateZip = StringHelper.getFirst(this.audioBitRateZip, 0.25f);
// 设置压缩大小
this.videoSizeZip = StringHelper.getFirst(this.videoSizeZip, 0.25f);
// 设置视频压缩率
this.videoBitRateZip = StringHelper.getFirst(this.videoBitRateZip, 0.25f);
this.videoBitRateZip = StringHelper.getFirst(this.videoBitRateZip, 0.1f);
// 设置压缩大小
this.videoSizeZip = StringHelper.getFirst(this.videoSizeZip, 0.1f);
// 设置音频最小比特率
this.minAudioBitRate = StringHelper.getFirst(this.minAudioBitRate, 48043);
}
/**
* 设置宽高最小480 *360
*/
public void initZip480_360() {
// 设置最小宽度,指的是宽度和高度中的大值,宽度>高度
this.minVideoWidth = StringHelper.getFirst(this.minVideoWidth, 480);
// 设置最小高度,指的是宽度和高度中的小值,宽度>高度
this.minVideoHeight = StringHelper.getFirst(this.minVideoHeight, 360);
// 设置视频最小比特率
this.minVideoBitRate = StringHelper.getFirst(this.minAudioBitRate, 295581);
}
/**
* 设置宽高最小800*600
*/
public void initZip800_600() {
// 设置最小宽度,指的是宽度和高度中的大值,宽度>高度
this.minVideoWidth = StringHelper.getFirst(this.minVideoWidth, 800);
// 设置最小高度,指的是宽度和高度中的小值,宽度>高度
this.minVideoHeight = StringHelper.getFirst(this.minVideoHeight, 600);
}
/**
* 设置宽最小960,高度根据宽度自适应
*/
public void initZip960() {
// 设置最小宽度,指的是宽度和高度中的大值,宽度>高度
this.minVideoWidth = StringHelper.getFirst(this.minVideoWidth, 960);
// 设置视频最小比特率
this.minVideoBitRate = StringHelper.getFirst(this.minAudioBitRate, 2955811);
}
/**
* 设置宽高最小1920*1080
*/
public void initZip1920_1080() {
// 设置最小宽度,指的是宽度和高度中的大值,宽度>高度
this.minVideoWidth = StringHelper.getFirst(this.minVideoWidth, 1920);
// 设置最小高度,指的是宽度和高度中的小值,宽度>高度
this.minVideoHeight = StringHelper.getFirst(this.minVideoHeight, 1080);
// 设置视频最小比特率
this.minVideoBitRate = StringHelper.getFirst(this.minAudioBitRate, 8311136);
}
/**
* 抓码为mp4
*/
public void initMp4() {
this.audioCodec = SOUND_CODEC_MP3;
this.videoCodeC = VIDEO_CODEC_MP4;
......@@ -288,6 +375,18 @@ public class MediaParameter extends BaseVo {
this.videoPixelFormat = VIDEO_FIXED_MP4;
}
/**
* 压缩mp4
*/
public void initZipMp4() {
// 设置结果为mp4
this.initMp4();
// 设置最小宽高
this.initZip960();
// 设置最小压缩比特率
this.initZipBitrate();
}
public int getAudioCodec() {
return audioCodec;
}
......
......@@ -48,6 +48,14 @@ public class TestMediaHelper {
testConvert(fileName, 0.25f, 0.10f);
}
@Test
public void testMinZipSingle() throws IOException {
String fileName = "100M.mp4";
// String fileName = "z001594372388232a3017ad69c82a342.MOV";
testConvert(fileName, 0.01f, 0.01f);
}
@Test
public void testConvertSingle_Two() throws IOException {
String fileName = "100M.mp4.size_50.quot_50.mp4";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment