查看视频信息的命令:ffmpeg -i 视频文件
,如下:
ffmpeg -i d://a.mp4
控制台输出
ffmpeg version N-89471-g88e2dc7d04 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --e
nable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libblur
ay --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopu
s --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --ena
ble-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-lib
x264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-z
lib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-amf --enable-cu
da --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisyn
th --enable-libmfx
libavutil 56. 5.100 / 56. 5.100
libavcodec 58. 6.103 / 58. 6.103
libavformat 58. 3.100 / 58. 3.100
libavdevice 58. 0.100 / 58. 0.100
libavfilter 7. 7.100 / 7. 7.100
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.101 / 3. 0.101
libpostproc 55. 0.100 / 55. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'd://a.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : www.aliyun.com - Media Transcoding
Duration: 00:05:29.20, start: 0.000000, bitrate: 377 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360,
340 kb/s, 20 fps, 20 tbr, 10240 tbn, 40 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, flt
p, 31 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
关键是这一句,包含了视频时长、开始时间与比特率
Duration: 00:05:29.20, start: 0.000000, bitrate: 377 kb/s
可以根据以下java代码来获取时长
import org.junit.Test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestMp4 {
@Test
public void test() {
getVideoTime("d://c.wmv");
}
/**
* 获取视频总时间
*/
private void getVideoTime(String video_path) {
List<String> commands = new ArrayList<>();
commands.add("ffmpeg");
commands.add("-i");
commands.add(video_path);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commands);
Process p = builder.start();
//从输入流中读取视频信息
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = "";
while ((line = br.readLine()) != null) {
stringBuilder.append(line);
}
br.close();
//从视频信息中解析时长
String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
Pattern pattern = Pattern.compile(regexDuration);
Matcher m = pattern.matcher(stringBuilder.toString());
if (m.find()) {
int time = getTimelen(m.group(1));
System.out.println("视频时长:" + time + "s , 开始时间:" + m.group(2) + ", 比特率:" + m.group(3) + "kb/s");
}
String regexVideo = "Video: (.*?), (.*?), (.*?)[,\\s]";
pattern = Pattern.compile(regexVideo);
m = pattern.matcher(stringBuilder.toString());
if (m.find()) {
System.out.println("编码格式:" + m.group(1) + ", 视频格式:" + m.group(2) + ", 分辨率:" + m.group(3) + "kb/s");
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 格式:"00:00:10.68"
private int getTimelen(String timelen) {
int min = 0;
String strs[] = timelen.split(":");
if (strs[0].compareTo("0") > 0) {
// 秒
min += Integer.valueOf(strs[0]) * 60 * 60;
}
if (strs[1].compareTo("0") > 0) {
min += Integer.valueOf(strs[1]) * 60;
}
if (strs[2].compareTo("0") > 0) {
min += Math.round(Float.valueOf(strs[2]));
}
return min;
}
}
输出
视频时长:329s , 开始时间:0.000000, 比特率:377kb/s
编码格式:h264 (High) (avc1 / 0x31637661), 视频格式:yuv420p, 分辨率:640x360kb/s