我怎么能够拿到一个声音文件的时间。
如果它过于难以在营地工作,那么任何其他方式都应做到正确。
我怎么能够拿到一个声音文件的时间。
如果它过于难以在营地工作,那么任何其他方式都应做到正确。
What kind of audio file? mp3? wav? Anyway you will probably need some specific library. See: http://de.php.net/manual/en/refs.utilspec.audio.php
如果你重新使用lin子/ix子,并且安装了刺,子,那么情况就是这样:
$time = exec("ffmpeg -i " . escapeshellarg($path) . " 2>&1 | grep Duration | cut -d -f 4 | sed s/,//");
list($hms, $milli) = explode( . , $time);
list($hours, $minutes, $seconds) = explode( : , $hms);
$total_seconds = ($hours * 3600) + ($minutes * 60) + $seconds;
/**
* https://stackoverflow.com/a/7135484/470749
* @param string $path
* @return int
*/
function getDurationOfWavInMs($path) {
$time = getDurationOfWav($path);
list($hms, $milli) = explode( . , $time);
list($hours, $minutes, $seconds) = explode( : , $hms);
$totalSeconds = ($hours * 3600) + ($minutes * 60) + $seconds;
return ($totalSeconds * 1000) + $milli;
}
/**
*
* @param string $path
* @return string
*/
function getDurationOfWav($path) {
$cmd = "ffmpeg -i " . escapeshellarg($path) . " 2>&1 | grep Duration | cut -d -f 4 | sed s/,//";
return exec($cmd);
}
感谢Stephen! 这对我来说是一件好事(尽管数百份档案进展缓慢)。
PHP没有标准的音频支持,你不得不更换PHP yourself,或者你可以使用一个工具获取信息:
你们可以使用ff子。 如下:
ffmpeg -i someAudio.mp3
产出如下:
Input #0, mp3, from someAudio.mp3 :
Duration: 00:00:34.03, start: 0.000000, bitrate: 127 kb/s
Stream #0.0: Audio: mp3, 48000 Hz, mono, s16, 128 kb/s
现在,你只需要一个reg子来控制结果。
如果你重新处理波段的档案,你就只需要将波段的样本长度与取样率分开,并且你可以接听电线的长度。
如果你/有些人想衡量症状3的长短,我发现一些法典、工作 n和不需要延期。
http://www.zedwood.com/article/php-calculate-duration-of-mp3。
ctrl+v
<?php
$mp3file = new MP3File("npr_304314290.mp3");//http://www.npr.org/rss/podcast.php?id=510282
$duration1 = $mp3file->getDurationEstimate();//(faster) for CBR only
$duration2 = $mp3file->getDuration();//(slower) for VBR (or CBR)
echo "duration: $duration1 seconds"."
";
echo "estimate: $duration2 seconds"."
";
echo MP3File::formatTime($duration2)."
";
?>
班级:
<?php
class MP3File
{
protected $filename;
public function __construct($filename)
{
$this->filename = $filename;
}
public static function formatTime($duration) //as hh:mm:ss
{
//return sprintf("%d:%02d", $duration/60, $duration%60);
$hours = floor($duration / 3600);
$minutes = floor( ($duration - ($hours * 3600)) / 60);
$seconds = $duration - ($hours * 3600) - ($minutes * 60);
return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
}
//Read first mp3 frame only... use for CBR constant bit rate MP3s
public function getDurationEstimate()
{
return $this->getDuration($use_cbr_estimate=true);
}
//Read entire file, frame by frame... ie: Variable Bit Rate (VBR)
public function getDuration($use_cbr_estimate=false)
{
$fd = fopen($this->filename, "rb");
$duration=0;
$block = fread($fd, 100);
$offset = $this->skipID3v2Tag($block);
fseek($fd, $offset, SEEK_SET);
while (!feof($fd))
{
$block = fread($fd, 10);
if (strlen($block)<10) { break; }
//looking for 1111 1111 111 (frame synchronization bits)
else if ($block[0]=="xff" && (ord($block[1])&0xe0) )
{
$info = self::parseFrameHeader(substr($block, 0, 4));
if (empty($info[ Framesize ])) { return $duration; } //some corrupt mp3 files
fseek($fd, $info[ Framesize ]-10, SEEK_CUR);
$duration += ( $info[ Samples ] / $info[ Sampling Rate ] );
}
else if (substr($block, 0, 3)== TAG )
{
fseek($fd, 128-10, SEEK_CUR);//skip over id3v1 tag size
}
else
{
fseek($fd, -9, SEEK_CUR);
}
if ($use_cbr_estimate && !empty($info))
{
return $this->estimateDuration($info[ Bitrate ],$offset);
}
}
return round($duration);
}
private function estimateDuration($bitrate,$offset)
{
$kbps = ($bitrate*1000)/8;
$datasize = filesize($this->filename) - $offset;
return round($datasize / $kbps);
}
private function skipID3v2Tag(&$block)
{
if (substr($block, 0,3)=="ID3")
{
$id3v2_major_version = ord($block[3]);
$id3v2_minor_version = ord($block[4]);
$id3v2_flags = ord($block[5]);
$flag_unsynchronisation = $id3v2_flags & 0x80 ? 1 : 0;
$flag_extended_header = $id3v2_flags & 0x40 ? 1 : 0;
$flag_experimental_ind = $id3v2_flags & 0x20 ? 1 : 0;
$flag_footer_present = $id3v2_flags & 0x10 ? 1 : 0;
$z0 = ord($block[6]);
$z1 = ord($block[7]);
$z2 = ord($block[8]);
$z3 = ord($block[9]);
if ( (($z0&0x80)==0) && (($z1&0x80)==0) && (($z2&0x80)==0) && (($z3&0x80)==0) )
{
$header_size = 10;
$tag_size = (($z0&0x7f) * 2097152) + (($z1&0x7f) * 16384) + (($z2&0x7f) * 128) + ($z3&0x7f);
$footer_size = $flag_footer_present ? 10 : 0;
return $header_size + $tag_size + $footer_size;//bytes to skip
}
}
return 0;
}
public static function parseFrameHeader($fourbytes)
{
static $versions = array(
0x0=> 2.5 ,0x1=> x ,0x2=> 2 ,0x3=> 1 , // x=> reserved
);
static $layers = array(
0x0=> x ,0x1=> 3 ,0x2=> 2 ,0x3=> 1 , // x=> reserved
);
static $bitrates = array(
V1L1 =>array(0,32,64,96,128,160,192,224,256,288,320,352,384,416,448),
V1L2 =>array(0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384),
V1L3 =>array(0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320),
V2L1 =>array(0,32,48,56, 64, 80, 96,112,128,144,160,176,192,224,256),
V2L2 =>array(0, 8,16,24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160),
V2L3 =>array(0, 8,16,24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160),
);
static $sample_rates = array(
1 => array(44100,48000,32000),
2 => array(22050,24000,16000),
2.5 => array(11025,12000, 8000),
);
static $samples = array(
1 => array( 1 => 384, 2 =>1152, 3 =>1152, ), //MPEGv1, Layers 1,2,3
2 => array( 1 => 384, 2 =>1152, 3 => 576, ), //MPEGv2/2.5, Layers 1,2,3
);
//$b0=ord($fourbytes[0]);//will always be 0xff
$b1=ord($fourbytes[1]);
$b2=ord($fourbytes[2]);
$b3=ord($fourbytes[3]);
$version_bits = ($b1 & 0x18) >> 3;
$version = $versions[$version_bits];
$simple_version = ($version== 2.5 ? 2 : $version);
$layer_bits = ($b1 & 0x06) >> 1;
$layer = $layers[$layer_bits];
$protection_bit = ($b1 & 0x01);
$bitrate_key = sprintf( V%dL%d , $simple_version , $layer);
$bitrate_idx = ($b2 & 0xf0) >> 4;
$bitrate = isset($bitrates[$bitrate_key][$bitrate_idx]) ? $bitrates[$bitrate_key][$bitrate_idx] : 0;
$sample_rate_idx = ($b2 & 0x0c) >> 2;//0xc => b1100
$sample_rate = isset($sample_rates[$version][$sample_rate_idx]) ? $sample_rates[$version][$sample_rate_idx] : 0;
$padding_bit = ($b2 & 0x02) >> 1;
$private_bit = ($b2 & 0x01);
$channel_mode_bits = ($b3 & 0xc0) >> 6;
$mode_extension_bits = ($b3 & 0x30) >> 4;
$copyright_bit = ($b3 & 0x08) >> 3;
$original_bit = ($b3 & 0x04) >> 2;
$emphasis = ($b3 & 0x03);
$info = array();
$info[ Version ] = $version;//MPEGVersion
$info[ Layer ] = $layer;
//$info[ Protection Bit ] = $protection_bit; //0=> protected by 2 byte CRC, 1=>not protected
$info[ Bitrate ] = $bitrate;
$info[ Sampling Rate ] = $sample_rate;
//$info[ Padding Bit ] = $padding_bit;
//$info[ Private Bit ] = $private_bit;
//$info[ Channel Mode ] = $channel_mode_bits;
//$info[ Mode Extension ] = $mode_extension_bits;
//$info[ Copyright ] = $copyright_bit;
//$info[ Original ] = $original_bit;
//$info[ Emphasis ] = $emphasis;
$info[ Framesize ] = self::framesize($layer, $bitrate, $sample_rate, $padding_bit);
$info[ Samples ] = $samples[$simple_version][$layer];
return $info;
}
private static function framesize($layer, $bitrate,$sample_rate,$padding_bit)
{
if ($layer==1)
return intval(((12 * $bitrate*1000 /$sample_rate) + $padding_bit) * 4);
else //layer 2, 3
return intval(((144 * $bitrate*1000)/$sample_rate) + $padding_bit);
}
}
LAME是获得LGPL许可的高质量MPEG 音像制品第三版(MP3)。
205. 最新信息:有许多处理音频/视频档案和检测其持续时间的PHP包:https:// Packagist.org/?query=ffmpeg 其中多数人要求在贵发展中国家/生产环境中安装刺.。
I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...
<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...
I found this script online that creates a thumbnail out of a image but the thumbnail image is created with poor quality how can I improve the quality of the image. And is there a better way to create ...
如何确认来自正确来源的数字。
Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...
I wonder there is a way to post a message to a facebook business page with cURL? thanks
I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...
How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...