音频和视频处理
依赖包
<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 表示支持重名文件覆盖
备注:
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("<p>上你号</p>"));
System.out.println(StringEscapeUtils.escapeHtml4("<p>上你 号</p>"));
System.out.println(StringEscapeUtils.unescapeHtml4("<p>上你 号</p>"));
}
输出结果
<p>上你号</p>
<p>上你 &nbsp; 号</p>
<p>上你 号</p>