我试图写一个正则表达式(与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
答案 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中进行检查。它在数组中很好地列出了它们。