Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
Y
yzg-util
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
YZG
yzg-util
Commits
6cbc6257
Commit
6cbc6257
authored
Jul 13, 2020
by
yanzg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
视频转换
parent
7533cb00
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
51 additions
and
35 deletions
+51
-35
MediaHelper.java
...image/src/main/java/com/yanzuoguang/util/MediaHelper.java
+22
-9
MediaParameter.java
...ge/src/main/java/com/yanzuoguang/util/MediaParameter.java
+11
-3
TestMediaHelper.java
yzg-util-image/src/test/java/helper/TestMediaHelper.java
+18
-23
ffmpeg
yzg-util-image/src/test/java/helper/ffmpeg
+0
-0
No files found.
yzg-util-image/src/main/java/com/yanzuoguang/util/MediaHelper.java
View file @
6cbc6257
...
@@ -25,6 +25,7 @@ public class MediaHelper extends ImageHelper {
...
@@ -25,6 +25,7 @@ public class MediaHelper extends ImageHelper {
* 默认截取视频的中间帧为封面
* 默认截取视频的中间帧为封面
*/
*/
public
static
final
int
FRAME_INDEX
=
3
;
public
static
final
int
FRAME_INDEX
=
3
;
public
static
boolean
Frame
=
true
;
/**
/**
* 从视频文件中获取第一张图片
* 从视频文件中获取第一张图片
...
@@ -80,6 +81,9 @@ public class MediaHelper extends ImageHelper {
...
@@ -80,6 +81,9 @@ public class MediaHelper extends ImageHelper {
if
(!
target
.
getParentFile
().
exists
())
{
if
(!
target
.
getParentFile
().
exists
())
{
target
.
getParentFile
().
mkdirs
();
target
.
getParentFile
().
mkdirs
();
}
}
if
(
target
.
exists
())
{
target
.
delete
();
}
FFmpegFrameGrabber
grabber
=
new
FFmpegFrameGrabber
(
fromFile
);
FFmpegFrameGrabber
grabber
=
new
FFmpegFrameGrabber
(
fromFile
);
try
{
try
{
...
@@ -94,25 +98,34 @@ public class MediaHelper extends ImageHelper {
...
@@ -94,25 +98,34 @@ public class MediaHelper extends ImageHelper {
FFmpegFrameRecorder
recorder
=
new
FFmpegFrameRecorder
(
FFmpegFrameRecorder
recorder
=
new
FFmpegFrameRecorder
(
toFile
,
toFile
,
parameter
.
getVideoWidthFinally
(),
parameter
.
getVideoWidthFinally
(),
parameter
.
getVideoHeightFinally
(),
parameter
.
getVideoHeightFinally
()
grabber
.
getAudioChannels
()
);
);
parameter
.
init
(
grabber
,
recorder
);
parameter
.
init
(
grabber
,
recorder
);
try
{
try
{
// 开始转换
// 开始转换
recorder
.
start
(
grabber
.
getFormatContext
());
// recorder.start(grabber.getFormatContext());
recorder
.
start
();
// 转码没有图像
if
(
Frame
)
{
Frame
frame
;
while
((
frame
=
grabber
.
grabFrame
(
true
,
true
,
true
,
false
))
!=
null
)
{
// if (grabber.grabPacket() == null) {
// continue;
// }
recorder
.
record
(
frame
);
}
}
else
{
avcodec
.
AVPacket
packet
;
avcodec
.
AVPacket
packet
;
long
dts
=
0
;
long
t1
=
System
.
currentTimeMillis
()
;
while
((
packet
=
grabber
.
grabPacket
())
!=
null
)
{
while
((
packet
=
grabber
.
grabPacket
())
!=
null
)
{
long
currentDts
=
packet
.
dts
();
if
(
currentDts
>=
dts
)
{
recorder
.
recordPacket
(
packet
);
recorder
.
recordPacket
(
packet
);
}
}
dts
=
currentDts
;
}
}
}
finally
{
}
finally
{
recorder
.
stop
();
recorder
.
stop
();
recorder
.
release
();
recorder
.
release
();
recorder
.
close
();
}
}
Log
.
info
(
MediaHelper
.
class
,
"转换完成...源文件:%s 目标文件:%s 旋转参数:%s "
,
Log
.
info
(
MediaHelper
.
class
,
"转换完成...源文件:%s 目标文件:%s 旋转参数:%s "
,
...
...
yzg-util-image/src/main/java/com/yanzuoguang/util/MediaParameter.java
View file @
6cbc6257
package
com
.
yanzuoguang
.
util
;
package
com
.
yanzuoguang
.
util
;
import
com.yanzuoguang.util.helper.StringHelper
;
import
com.yanzuoguang.util.helper.StringHelper
;
import
com.yanzuoguang.util.log.Log
;
import
com.yanzuoguang.util.vo.BaseVo
;
import
com.yanzuoguang.util.vo.BaseVo
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
org.bytedeco.javacpp.avcodec
;
import
org.bytedeco.javacpp.avcodec
;
...
@@ -194,6 +195,7 @@ public class MediaParameter extends BaseVo {
...
@@ -194,6 +195,7 @@ public class MediaParameter extends BaseVo {
// 读取音频属性
// 读取音频属性
this
.
audioBitRate
=
StringHelper
.
getFirst
(
this
.
audioBitRate
,
grabber
.
getAudioBitrate
());
this
.
audioBitRate
=
StringHelper
.
getFirst
(
this
.
audioBitRate
,
grabber
.
getAudioBitrate
());
this
.
audioCodec
=
StringHelper
.
getFirstRun
(
AV_CODEC_ID_NONE
,
AV_CODEC_ID_NONE
,
this
.
audioCodec
,
grabber
.
getAudioCodec
());
this
.
audioCodec
=
StringHelper
.
getFirstRun
(
AV_CODEC_ID_NONE
,
AV_CODEC_ID_NONE
,
this
.
audioCodec
,
grabber
.
getAudioCodec
());
Log
.
info
(
MediaParameter
.
class
,
"getAudioCodecName:%s"
,
grabber
.
getAudioCodecName
());
this
.
audioFrameRate
=
StringHelper
.
getFirstRun
((
double
)
AV_SAMPLE_FMT_NONE
,
(
double
)
AV_SAMPLE_FMT_NONE
,
this
.
audioFrameRate
,
grabber
.
getAudioFrameRate
());
this
.
audioFrameRate
=
StringHelper
.
getFirstRun
((
double
)
AV_SAMPLE_FMT_NONE
,
(
double
)
AV_SAMPLE_FMT_NONE
,
this
.
audioFrameRate
,
grabber
.
getAudioFrameRate
());
// 视频宽度高度
// 视频宽度高度
...
@@ -201,7 +203,8 @@ public class MediaParameter extends BaseVo {
...
@@ -201,7 +203,8 @@ public class MediaParameter extends BaseVo {
this
.
videoHeight
=
StringHelper
.
getFirst
(
this
.
videoHeight
,
grabber
.
getImageHeight
());
this
.
videoHeight
=
StringHelper
.
getFirst
(
this
.
videoHeight
,
grabber
.
getImageHeight
());
// 读取视频格式
// 读取视频格式
this
.
videoFormat
=
StringHelper
.
getFirst
(
this
.
videoFormat
,
grabber
.
getFormat
());
this
.
videoFormat
=
StringHelper
.
getFirst
(
this
.
videoFormat
,
grabber
.
getFormat
());
this
.
videoCodeC
=
StringHelper
.
getFirst
(
this
.
videoCodeC
,
grabber
.
getVideoCodec
());
this
.
videoCodeC
=
StringHelper
.
getFirstRun
(
AV_CODEC_ID_NONE
,
AV_CODEC_ID_NONE
,
this
.
videoCodeC
,
grabber
.
getVideoCodec
());
Log
.
info
(
MediaParameter
.
class
,
"getVideoCodecName:%s"
,
grabber
.
getVideoCodecName
());
this
.
videoPixelFormat
=
StringHelper
.
getFirstRun
(
AV_PIX_FMT_NONE
,
AV_PIX_FMT_NONE
,
this
.
videoPixelFormat
,
grabber
.
getPixelFormat
());
this
.
videoPixelFormat
=
StringHelper
.
getFirstRun
(
AV_PIX_FMT_NONE
,
AV_PIX_FMT_NONE
,
this
.
videoPixelFormat
,
grabber
.
getPixelFormat
());
// 读取视频属性
// 读取视频属性
this
.
videoRotate
=
StringHelper
.
toDouble
(
grabber
.
getVideoMetadata
(
ROTATE
));
this
.
videoRotate
=
StringHelper
.
toDouble
(
grabber
.
getVideoMetadata
(
ROTATE
));
...
@@ -217,16 +220,19 @@ public class MediaParameter extends BaseVo {
...
@@ -217,16 +220,19 @@ public class MediaParameter extends BaseVo {
public
void
init
(
FFmpegFrameGrabber
grabber
,
FFmpegFrameRecorder
recorder
)
{
public
void
init
(
FFmpegFrameGrabber
grabber
,
FFmpegFrameRecorder
recorder
)
{
// 设置音频比特率
// 设置音频比特率
recorder
.
setAudioBitrate
(
this
.
getAudioBitRateFinally
());
recorder
.
setAudioBitrate
(
this
.
getAudioBitRateFinally
());
recorder
.
setAudioCodec
(
this
.
audioCodec
);
//
recorder.setAudioCodec(this.audioCodec);
// 设置声道
// 设置声道
recorder
.
setAudioChannels
(
grabber
.
getAudioChannels
());
recorder
.
setAudioChannels
(
grabber
.
getAudioChannels
());
// 设置音频属性
// recorder.setSampleFormat(grabber.getSampleFormat());
// recorder.setSampleRate(grabber.getSampleRate());
// 视频格式
// 视频格式
recorder
.
setFormat
(
this
.
videoFormat
);
recorder
.
setFormat
(
this
.
videoFormat
);
// 设置转码视频格式
// 设置转码视频格式
recorder
.
setVideoCodec
(
this
.
videoCodeC
);
recorder
.
setVideoCodec
(
this
.
videoCodeC
);
// 设置像素格式
// 设置像素格式
recorder
.
setPixelFormat
(
this
.
videoPixelFormat
);
//
recorder.setPixelFormat(this.videoPixelFormat);
// 设置转码后的视频角度
// 设置转码后的视频角度
recorder
.
setMetadata
(
ROTATE
,
String
.
valueOf
(
this
.
getVideoRotateFinally
()));
recorder
.
setMetadata
(
ROTATE
,
String
.
valueOf
(
this
.
getVideoRotateFinally
()));
...
@@ -234,6 +240,8 @@ public class MediaParameter extends BaseVo {
...
@@ -234,6 +240,8 @@ public class MediaParameter extends BaseVo {
recorder
.
setVideoBitrate
(
StringHelper
.
getFirst
(
this
.
getVideoBitRateFinally
(),
this
.
getAudioBitRateFinally
()));
recorder
.
setVideoBitrate
(
StringHelper
.
getFirst
(
this
.
getVideoBitRateFinally
(),
this
.
getAudioBitRateFinally
()));
// 设置帧速率
// 设置帧速率
recorder
.
setFrameRate
(
grabber
.
getFrameRate
());
recorder
.
setFrameRate
(
grabber
.
getFrameRate
());
// 帧长度
recorder
.
setTimestamp
(
grabber
.
getTimestamp
());
}
}
public
void
initZipMp4
()
{
public
void
initZipMp4
()
{
...
...
yzg-util-image/src/test/java/helper/TestMediaHelper.java
View file @
6cbc6257
...
@@ -2,19 +2,17 @@ package helper;
...
@@ -2,19 +2,17 @@ package helper;
import
com.yanzuoguang.util.MediaHelper
;
import
com.yanzuoguang.util.MediaHelper
;
import
com.yanzuoguang.util.MediaParameter
;
import
com.yanzuoguang.util.MediaParameter
;
import
com.yanzuoguang.util.thread.RunnableListAuto
;
import
org.junit.Test
;
import
org.junit.Test
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
TestMediaHelper
{
public
class
TestMediaHelper
{
private
boolean
isFirstImage
=
false
;
private
boolean
isFirstImage
=
false
;
public
float
[]
sizes
=
new
float
[]{
1
f
,
0.5f
,
1
f
,
1
f
,
0.5f
,
0.5f
};
public
float
[]
sizes
=
new
float
[]{
1
f
,
0.5f
,
1
f
,
1
f
,
0.5f
,
0.5f
};
public
float
[]
quotes
=
new
float
[]{
1
f
,
1
f
,
0.5f
,
0.25f
,
0.5f
,
0.25f
};
public
float
[]
quotes
=
new
float
[]{
1
f
,
1
f
,
0.5f
,
0.25f
,
0.5f
,
0.25f
};
public
String
[]
fileNames
=
new
String
[]{
"100M.mp4"
,
"z001594372388232a3017ad69c82a342.MOV"
,
"xuziming.mp4"
};
private
String
getFile
(
String
file
)
{
private
String
getFile
(
String
file
)
{
...
@@ -35,36 +33,33 @@ public class TestMediaHelper {
...
@@ -35,36 +33,33 @@ public class TestMediaHelper {
}
}
@Test
@Test
public
void
testConvert
()
{
public
void
testConvert
()
throws
IOException
{
List
<
Runnable
>
list
=
new
ArrayList
<>();
for
(
String
fileName
:
fileNames
)
{
for
(
int
i
=
0
;
i
<
sizes
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
sizes
.
length
;
i
++)
{
list
.
add
(
testConvertThread
(
sizes
[
i
],
quotes
[
i
])
);
testConvert
(
fileName
,
sizes
[
i
],
quotes
[
i
]
);
}
}
RunnableListAuto
.
run
(
list
);
}
private
Runnable
testConvertThread
(
float
size
,
float
quote
)
{
return
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
testConvert
(
size
,
quote
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
};
@Test
public
void
testConvertSingle
()
throws
IOException
{
String
fileName
=
"100M.mp4"
;
// String fileName = "z001594372388232a3017ad69c82a342.MOV";
testConvert
(
fileName
,
1
,
1
);
}
}
private
void
testConvert
(
float
size
,
float
quote
)
throws
IOException
{
private
void
testConvert
(
String
fileName
,
float
size
,
float
quote
)
throws
IOException
{
String
file
=
getFile
(
"100M.mp4"
);
String
file
=
getFile
(
fileName
);
String
targetFile
=
getTargetFile
(
"target/100M.mp4"
);
String
targetFile
=
getTargetFile
(
"target/"
+
fileName
);
String
toFile
=
String
.
format
(
"%s.size_%d.quot_%d.mp4"
,
targetFile
,
(
int
)
(
size
*
100
),
(
int
)
(
quote
*
100
));
String
toFile
=
String
.
format
(
"%s.size_%d.quot_%d.mp4"
,
targetFile
,
(
int
)
(
size
*
100
),
(
int
)
(
quote
*
100
));
MediaParameter
parameter
=
new
MediaParameter
();
MediaParameter
parameter
=
new
MediaParameter
();
parameter
.
setVideoSizeZip
(
size
);
parameter
.
setVideoSizeZip
(
size
);
parameter
.
setVideoBitRateZip
(
quote
);
parameter
.
setVideoBitRateZip
(
quote
);
// parameter.setVideoFrameRate(15);
MediaHelper
.
convertVideo
Mp4
(
file
,
toFile
,
parameter
);
MediaHelper
.
convertVideo
(
file
,
toFile
,
parameter
);
}
}
}
}
yzg-util-image/src/test/java/helper/ffmpeg
deleted
100755 → 0
View file @
7533cb00
File deleted
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment