JAVA 扩展--持续更新

音频和视频处理

依赖包

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
    <version>3.2.0</version>
</dependency>

案例

获取音频音量

ffmpeg命令

ffmpeg -i D:\test\10000.wav -filter_complex volumedetect -c:v copy -f null /dev/null

代码

 DefaultFFMPEGLocator defaultFFMPEGLocator = new DefaultFFMPEGLocator();
        ProcessWrapper ffmpeg = defaultFFMPEGLocator.createExecutor();
        ffmpeg.addArgument("-i");
        ffmpeg.addArgument(path);
        ffmpeg.addArgument("-filter_complex");
        ffmpeg.addArgument("volumedetect");
        ffmpeg.addArgument("-c:v");
        ffmpeg.addArgument("copy");
        ffmpeg.addArgument("-f");
        ffmpeg.addArgument("null");
        ffmpeg.addArgument("/dev/null");
        ffmpeg.execute();
        try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) {
	    	while ((line = br.readLine()) != null) {
	            log.info("[录音解析信息]==>" + line);
	        }
        } catch (IOException e) {
            log.error("[解析录音]==>获取分贝异常={}", e.getMessage());
        } finally {
            ffmpeg.close();
        }

输出结果

[录音解析信息]==>Guessed Channel Layout for Input Stream #0.0 : mono
[录音解析信息]==>Input #0, wav, from 'C:\Users\zhihao.ye\Desktop\test\声音小的样本.wav':
[录音解析信息]==>  Duration: 00:00:03.74, bitrate: 705 kb/s
[录音解析信息]==>  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, mono, s16, 705 kb/s
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa18bdc0] n_samples: 0
[录音解析信息]==>Stream mapping:
[录音解析信息]==>  Stream #0:0 (pcm_s16le) -> volumedetect
[录音解析信息]==>  volumedetect -> Stream #0:0 (pcm_s16le)
[录音解析信息]==>Press [q] to stop, [?] for help
[录音解析信息]==>Output #0, null, to 'C:\Users\zhihao.ye\Desktop\test\demo.txt':
[录音解析信息]==>  Metadata:
[录音解析信息]==>    encoder         : Lavf58.76.100
[录音解析信息]==>  Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
[录音解析信息]==>    Metadata:
[录音解析信息]==>      encoder         : Lavc58.134.100 pcm_s16le
[录音解析信息]==>size=N/A time=00:00:00.00 bitrate=N/A speed=   0x    
[录音解析信息]==>size=N/A time=00:00:03.71 bitrate=N/A speed=1.03e+03x    
[录音解析信息]==>video:0kB audio:322kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] n_samples: 165061
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] mean_volume: -36.7 dB
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] max_volume: -23.0 dB
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] histogram_22db: 1
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] histogram_23db: 13
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] histogram_24db: 28
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] histogram_25db: 120
[录音解析信息]==>[Parsed_volumedetect_0 @ 0000027faa199b00] histogram_26db: 594
名称描述
mean_volume平均分贝
max_volume最大分贝

音频音量调整

基于分贝进行调整

ffmpeg命令

        ffmpeg -i D:\OTT\source.mp4 -af volume=-10dB -y D:\OTT\target.mp4
        ffmpeg -i D:\OTT\source.mp4 -filter:a volume=-10dB -y D:\OTT\target.mp4
        ffmpeg -i D:\OTT\source.mp4 -filter volume=-10dB -y D:\OTT\target.mp4
备注:
1、-af 等价于  -filter:a;-af为缩写
2、-y 表示支持重名文件覆盖

FFempg官方文档

备注:
1、不能在原始文件上操作
2、目标文件可以不用提前创建
3、volume=10dB :在原始音频基础上增加10分贝音量;volume=-10dB :在原始音频基础上降低10分贝音量。

代码

 DefaultFFMPEGLocator defaultFFMPEGLocator = new DefaultFFMPEGLocator();
        ProcessWrapper ffmpeg = defaultFFMPEGLocator.createExecutor();
        ffmpeg.addArgument("-i");
        ffmpeg.addArgument(sourcePath);
        ffmpeg.addArgument("-af");
        ffmpeg.addArgument("volume="+volume+"dB");
        ffmpeg.addArgument("-y");
        ffmpeg.addArgument(targetPath);
        ffmpeg.execute();
        try (BufferedReader br = new BufferedReader(new InputStreamReader(ffmpeg.getErrorStream()))) {
          	while ((line = br.readLine()) != null) {
	            log.info("[录音解析信息]==>" + line);
	        }
        } catch (IOException e) {
            log.error("[解析录音]==>调整录音分贝发生异常={}", e.getMessage());
        } finally {
            ffmpeg.close();
        }
基于分贝进行调整

HTML 元素转义工具

工具类 StringEscapeUtils

依赖包

版本根据需要自己选

	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.5</version>
	</dependency>

案例

    public static void main(String[] args) {
        System.out.println(StringEscapeUtils.unescapeHtml4("&lt;p&gt;上你号&lt;/p&gt;"));
        System.out.println(StringEscapeUtils.escapeHtml4("<p>上你 &nbsp; 号</p>"));
        System.out.println(StringEscapeUtils.unescapeHtml4("<p>上你 &nbsp; 号</p>"));
    }
输出结果
<p>上你号</p>
&lt;p&gt;上你 &amp;nbsp;&lt;/p&gt;
<p>上你   号</p>

反转义 unescapeHtml4

转义 escapeHtml4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值