如何才能修改MP3的文件长度(持续时间)信息?

时间:2022-08-08 22:21:13
有一MP3文件,MPEG信息显示为0:06:30,我想修改为我想要的信息,如:0:30:30,但不知道这些信息是存在哪,怎么存放的,也没有找到可以修改的软件,大部分软件都只是修改ID3V1和ID3V2的,请问有办法办到吗?

20 个解决方案

#1


文件格式没用过

#2


搜搜MP3文件格式,分析其具体的格式就可以得到 

没做过,给你个思路

#3


http://sourceforge.net/projects/mp3bookhelper
sf有开源项目
不过我用delphi2006开不了

#4


看看这个mp3文件结构,应该会有帮助
http://www.tomore.com/367/25618.html

#5


上面说1帧是24ms,可能要增加帧数吧,呵呵,没有搞过~

#6


可以不增加帧数的,只是改掉MP3摘要信息就行了,但就是不知道摘要信息放在哪在

#7


好像是通过计算得到的,看看这个贴子,上面还有个VC的代码
http://www.hydrogenaudio.org/forums/lofiversion/index.php/t46563.html

#8


应该不会吧,但我感觉好像是有固定的信息格式一样

#9


有其他软件能够修改得吗?

#10


用google搜一下mp3的文件结果,然后修改

#11


找过了,没有找到相关的软件

#12


请好心人帮帮忙啊!

#13


在mp3的头信息下有一个TLEN项,里面是播放时间的ms值。
你把mp3按binary方式打开就可以看到。
好运。

#14


分析结构,然后按偏移读数据就OK了吧,一般是都文件头信息好像都是这样做的

#15


关键就是结构里没有关于这一点的说明,而且MP3的头信息里,好像有的里面有ms值,但有的没有

#16


mark

#17


mp3的长度信息应该是计算出来的,不是写在文件头中的。

#18


我描述一下计算MP3播放时长的算法吧:

首先,判断该MP3是CBR还是VBR,依据是在第一帧里面是否找到"Xing"或"VBRI"字样,如果没找到就是CBR,如果找到就是VBR.

(1)CBR。 CBR的MP3既没有FILE HEADER,也没有VBR HEADER,所以无法简单地知道播放时长、总帧数等信息,那么我的计算方法是,先读出第一帧的bitrate,然后播放duration = (filesize - id3_size) / (bitrate/8) 也就是主要靠byterate来算,MP3文件长度里需要扣掉ID3 TAG的长度,会是在文件头或文件尾

(2)VBR。 VBR的话会有VBR HEADER,不论是Xing还是VBRI,一般都可以得到TotalFrameNumber数据,再加上帧头解出来的SamplesPerFrame,SampleRate, 那么Duration = TotalFrameNumber * SamplesPerFrame / SampleRate

所以,回过来回答楼主的问题,如果是CBR的MP3文件,你把最后一帧(歌曲末尾一般是静音)一直复制,直至文件长度套入公式可以达到你要求的时间为止。那么一首6:30的歌曲播完后就会一直静音到30分钟。显示上也是30分钟。如果是VBR的MP3文件,那么我猜测直接修改Xing header或VBRI header中的TotalFrameNum区域就可以改变播放时长了,但播放到文件末尾处可能会有错。

关于frame header和VBRI,XING header,请参考http://www.codeproject.com/audio/MPEGAudioInfo.asp

#19


我一气做过
很简单的

#20


以前

#1


文件格式没用过

#2


搜搜MP3文件格式,分析其具体的格式就可以得到 

没做过,给你个思路

#3


http://sourceforge.net/projects/mp3bookhelper
sf有开源项目
不过我用delphi2006开不了

#4


看看这个mp3文件结构,应该会有帮助
http://www.tomore.com/367/25618.html

#5


上面说1帧是24ms,可能要增加帧数吧,呵呵,没有搞过~

#6


可以不增加帧数的,只是改掉MP3摘要信息就行了,但就是不知道摘要信息放在哪在

#7


好像是通过计算得到的,看看这个贴子,上面还有个VC的代码
http://www.hydrogenaudio.org/forums/lofiversion/index.php/t46563.html

#8


应该不会吧,但我感觉好像是有固定的信息格式一样

#9


有其他软件能够修改得吗?

#10


用google搜一下mp3的文件结果,然后修改

#11


找过了,没有找到相关的软件

#12


请好心人帮帮忙啊!

#13


在mp3的头信息下有一个TLEN项,里面是播放时间的ms值。
你把mp3按binary方式打开就可以看到。
好运。

#14


分析结构,然后按偏移读数据就OK了吧,一般是都文件头信息好像都是这样做的

#15


关键就是结构里没有关于这一点的说明,而且MP3的头信息里,好像有的里面有ms值,但有的没有

#16


mark

#17


mp3的长度信息应该是计算出来的,不是写在文件头中的。

#18


我描述一下计算MP3播放时长的算法吧:

首先,判断该MP3是CBR还是VBR,依据是在第一帧里面是否找到"Xing"或"VBRI"字样,如果没找到就是CBR,如果找到就是VBR.

(1)CBR。 CBR的MP3既没有FILE HEADER,也没有VBR HEADER,所以无法简单地知道播放时长、总帧数等信息,那么我的计算方法是,先读出第一帧的bitrate,然后播放duration = (filesize - id3_size) / (bitrate/8) 也就是主要靠byterate来算,MP3文件长度里需要扣掉ID3 TAG的长度,会是在文件头或文件尾

(2)VBR。 VBR的话会有VBR HEADER,不论是Xing还是VBRI,一般都可以得到TotalFrameNumber数据,再加上帧头解出来的SamplesPerFrame,SampleRate, 那么Duration = TotalFrameNumber * SamplesPerFrame / SampleRate

所以,回过来回答楼主的问题,如果是CBR的MP3文件,你把最后一帧(歌曲末尾一般是静音)一直复制,直至文件长度套入公式可以达到你要求的时间为止。那么一首6:30的歌曲播完后就会一直静音到30分钟。显示上也是30分钟。如果是VBR的MP3文件,那么我猜测直接修改Xing header或VBRI header中的TotalFrameNum区域就可以改变播放时长了,但播放到文件末尾处可能会有错。

关于frame header和VBRI,XING header,请参考http://www.codeproject.com/audio/MPEGAudioInfo.asp

#19


我一气做过
很简单的

#20


以前

#21