【FFmpeg】java实现利用ffmpeg视频上传转码同时截取一帧保存为同名图片,并获取视频分辨率(补充部分)

本文介绍了在Java中如何使用FFmpeg进行视频上传转码的同时,截取一帧保存为同名图片,并获取视频分辨率。作者在过程中遇到了不同视频信息描述的挑战,通过多次尝试和分析,最终找到了稳定获取分辨率的方法,涉及字符串处理和正则表达式。
摘要由CSDN通过智能技术生成

〇、前情提要

完成了视频上传,接下来是给上传的视频保存一张同名的jpg文件在同样文件夹中,并且获取到视频的分辨率。
但在获取分辨率的路上遇到了各种头疼的玩意…
macOS Catalina 10.15.1
ffmpeg version 4.3.1
Eclipse

参考:

  1. 【FFmpeg】mac系统安装FFmpeg并对视频进行转码、对视频截图、对视频压缩
    https://blog.csdn.net/weixin_43210113/article/details/109802138
  2. 【FFmpeg】java实现利用ffmpeg视频上传转码同时截取一帧保存为同名图片,并获取视频分辨率
    https://blog.csdn.net/weixin_43210113/article/details/109807300
  3. java分割字符串 Unclosed character class near index 错误
    https://blog.csdn.net/u014608640/article/details/80020032
  4. 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("\\[")<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值