〇、前情提要
完成了视频上传,接下来是给上传的视频保存一张同名的jpg文件在同样文件夹中,并且获取到视频的分辨率。
但在获取分辨率的路上遇到了各种头疼的玩意…
macOS Catalina 10.15.1
ffmpeg version 4.3.1
Eclipse
参考:
- 【FFmpeg】mac系统安装FFmpeg并对视频进行转码、对视频截图、对视频压缩
https://blog.csdn.net/weixin_43210113/article/details/109802138 - 【FFmpeg】java实现利用ffmpeg视频上传转码同时截取一帧保存为同名图片,并获取视频分辨率
https://blog.csdn.net/weixin_43210113/article/details/109807300 - java分割字符串 Unclosed character class near index 错误
https://blog.csdn.net/u014608640/article/details/80020032 - java从字符串中提取数字
https://www.cnblogs.com/lxqiaoyixuan/p/8541530.html
一、问题描述
有次上传的时候遇到了不同的视频信息描述。
总结后有三种类型,但可能有更多,欢迎评论…但最后解决方法应该是雷打不动的了…
如不想看第一次失败分析请直接看part3第二次分析。
二、第一次分析
参考
上回说到了用这位大佬的方法。
参考:
简单粗暴:Java 使用 FFmpeg 获取视频的分辨率 Java获取视频的时长 Java获取视频的编码格式
https://blog.csdn.net/q2450751976/article/details/103993096
直接取其中找到fps所在的Stream开头的行,通过,
可拆分为
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661),
yuv420p(tv,
bt709),
1920x1080 [SAR 1:1 DAR 16:9],
3779 kb/s,
30 fps,
30 tbr,
90k tbn,
180k tbc (default)
其中[3]为想要的1920x1080 [SAR 1:1 DAR 16:9],
definition = definition.trim().split(" ")[0];
通过trim()删除首尾的空格,再通过空格拆分.split(" ")[]得到
1920x1080
[SAR
1:1
DAR
16:9],
取[0]得到分辨率
我的原文
具体解释请前往
我的文章:
【FFmpeg】java实现利用ffmpeg视频上传转码同时截取一帧保存为同名图片,并获取视频分辨率
https://blog.csdn.net/weixin_43210113/article/details/109807300
问题发现
✨注意:每个视频输出的信息并不相同,需要换一个获取的方式
第一次尝试
Video1: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9],
✨Video2: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 1201 kb
Video1在yuv420p后多了一个(tv, bt709)。
于是按照,
分割会遇到问题,改成用[
分割尝试。
后续又发现了video4的存在,不存在[]
,视频来源于互联网下载…
我服了,那就按第二个x来分割再取其左右吧…再有问题视频我就…再改呜呜呜
String definition = null;
String line = "Video1: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9]";
//String line = "Video2: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 1201 kb";
definition = line.split("\\[")<