我正在尝试编写一个正则表达式(与ffmpeg一起使用),它可以检查WAV文件是否超过了某种质量。
最低限度应是:
音频频道:2(立体声)
音频采样率: 44,100 Hz
音频比特率: 1411 Kbps
音频位深度: 16位
因此,到目前为止,我已经尝试了以下命令:
/usr/local/bin/ffmpeg -i "/path/to/file.wav" 2>&1 | egrep 'stereo|2 channels'这可以很好地得到一个立体(2通道) WAV。我对下一部分有问题,在一系列数字之间搜索。
/usr/local/bin/ffmpeg -i "/path/to/file.wav" 2>&1 | egrep 'stereo|2 channels' | egrep '[41000-196000] Hz'很明显,这只会逐个搜索每个数字,所以如果有4或1或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
发布于 2014-08-11 14:09:13
感谢每一个回复的人。
我可能应该在我最初的问题中提到,这最终将在PHP中使用,对不起!之前它正在对命令行进行基本检查,并试图盲目地遵循这条路线,而不考虑其他PHP解决方案。
最后,我使用GetID3获取我们需要的信息,并在PHP中进行检查。它在一个数组中很好地列出了它们。
发布于 2014-08-08 12:13:28
在你的白鹭里试试这个:
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)'发布于 2014-08-08 12:17:09
不幸的是,在正则表达式中,数字范围并不是简单而直接的。这应该适用于你的样本率,但是我不认为有任何方法可以用正则表达式做大于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'https://stackoverflow.com/questions/25202990
复制相似问题