Grep为一定范围之间的数字 - 检查WAV质量

时间:2014-08-08 11:56:41

标签: regex audio ffmpeg grep ubuntu-12.04

我试图写一个正则表达式(与ffmpeg一起使用,它可以检查WAV文件是否超过一定的质量。

最低要求应为:

音频频道: 2(立体声)
音频采样率: 44,100 Hz
音频比特率: 1411 Kbps
音频位深度: 16位

到目前为止,我已尝试过以下命令:

  • /usr/local/bin/ffmpeg -i "/path/to/file.wav" 2>&1 | egrep 'stereo|2 channels'

这可以很好地获得一个stero(2声道)WAV。我在下一部分遇到问题,在一系列数字之间进行搜索。

  • /usr/local/bin/ffmpeg -i "/path/to/file.wav" 2>&1 | egrep 'stereo|2 channels' | egrep '[41000-196000] Hz'

显然,这只是单独搜索每个数字,所以如果有4或1或0或0或0等,它就会找到结果...

比特率和比特深度需要分别超过1411和16。

谢谢

编辑 - 这里是低质量WAV的ffmpeg输出,应该被拒绝:

ffmpeg version git-2012-05-22-27127eb Copyright (c) 2000-2012 the FFmpeg developers built on May 22 2012 12:27:21 with gcc 4.6.1 configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab libavutil 51. 53.100 / 51. 53.100 libavcodec 54. 21.101 / 54. 21.101 libavformat 54. 6.100 / 54. 6.100 libavdevice 53. 4.100 / 53. 4.100 libavfilter 2. 75.100 / 2. 75.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100 [wav @ 0x355b140] max_analyze_duration 5000000 reached at 5056000 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, wav, from '/path/to/file.wav': Duration: 00:02:28.47, bitrate: 512 kb/s Stream #0:0: Audio: pcm_u8 ([1][0][0][0] / 0x0001), 32000 Hz, stereo, u8, 512 kb/s

3 个答案:

答案 0 :(得分:0)

在你的egrep中试试这个:

egrep '( 4[1-9][0-9][0-9][0-9] Hz| [5-9][0-9][0-9][0-9][0-9] Hz| 19[0-6][0-9][0-9][0-9] Hz| 1[0-8][0-9][0-9][0-9][0-9] Hz)'

答案 1 :(得分:0)

不幸的是,正则表达式中的数字范围并不简单直接。这应该适用于您的采样率,但我不认为有任何方法可以使用正则表达式执行大于x的操作。你可能想看看awk,看看它是否有可能。

egrep '(?:4[4-9][0-9]{3}|[5-9][0-9]{4}|1[0-8][0-9]{4}|19[0-5][0-9]{3}|196000) Hz'

答案 2 :(得分:0)

感谢所有回复的人。

我可能应该提到这最终将在我的原始问题中用于PHP,抱歉!已经意识到它之前正在对命令行进行基本检查,并试图盲目地遵循该路线而不考虑其他PHP解决方案。

最后,我使用GetID3来获取我们需要的信息并在PHP中进行检查。它在数组中很好地列出了它们。