如果我知道MP3文件的URL,获取其长度,比特率,大小等的最简单/最快的方法是什么?
如何只下载MP3的ID3标签部分以获取这些详细信息?
答案 0 :(得分:5)
您需要查看mp3文件中的ID3标签。
除非您在其他地方跟踪您想要的元数据。
要专门获取文件的跟踪长度,您需要查看ID3元数据标记,特别是标记的“TRCK”框架。
要仅下载ID3标记部分,必须先下载文件的ID3标题部分。
此website包含有关ID3标记格式的非常具体的信息。您需要查看ID3标签的版本号,然后,基于此,您需要找到有关ID3标签的时间长度的信息。然后,您必须下载WHOLE标记,因为框架没有任何特定顺序。
然后您应该能够使用第三方库来查找TRCK帧及其数据。
答案 1 :(得分:1)
以下是获取文件大小的方法,但是如何获得比特率和跟踪长度?
import java.io.*;
import java.net.*;
public class FileSizeFromURL {
public static final void main(String[] args) {
URL url;
URLConnection conn;
int size;
if(args.length != 1) {
System.out.println("Usage: FileSizeFromURL ");
return;
}
try {
url = new URL(args[0]);
conn = url.openConnection();
size = conn.getContentLength();
if(size < 0)
System.out.println("Could not determine file size.");
else
System.out.println(args[0] + "\nSize: " + size);
conn.getInputStream().close();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:1)
获得长度,比特率,大小等最简单/最快捷的方式是什么?
使用HTTP HEAD请求可以获得的文件大小。如果按“长度”表示以秒为单位播放时间,则无法获取整个文件。您可以猜测,通过获取前几个MP3帧,查看它们的比特率,并假设文件的其余部分具有相同的比特率,但考虑到可变比特率编码的普及,这可能性将接近准确的是相当低的。
理论上,ID3标签可以包含可能允许您在ASPI和ETCO标签中更好地猜测长度的信息。但在实践中,这些很少出现。如何只下载MP3的ID3标签部分以获取这些详细信息?
对于ID3v2标签,请抓取文件的开头。 (ID3v2帧可能在其他地方,但实际上它们总是在那里。)你无法预先确定标签的长度。对于纯文本标签,您可能会在前512-1024字节中找到所需的信息。不幸的是,越来越多的MP3嵌入了“专辑艺术”图片,这可能会更长;尝试选择一个优雅地忽略截断的ID3信息的ID3库。
ID3v1标签位于文件末尾。再一次,你无法分辨他们将会有多长时间。当然,您事先并不知道该文件是否具有ID3v1标签,ID3v2标签,两者都有或两者都没有。一般来说,这些天ID3v2是更好的选择。
要通过HTTP读取文件的一部分,您需要Range标头。这在任何地方都不受支持。
总之,这方面存在足够的问题,最好的选择可能就是放弃并只提取整个文件。
答案 3 :(得分:1)
我问了一年后这个问题+问题,但我确实有一些信息可以在以后添加。我回答了类似的问题,关于从远程服务器上的图像获取图像尺寸而不下载整个图像。请通过以下网址查看该讨论:
Get image dimensions with Curl
您绝对可以使用相同的技术从ID3标签中提取信息,而无需从远程服务器下载整个MP3。
我希望这有助于未来的路人。
答案 4 :(得分:0)
您无法仅通过网址获取此信息。
您必须加载前几K内容并使用mp3库解码标头并获取值。
答案 5 :(得分:0)
该数据在id3标签中进行编码,因此您需要至少下载该文件的大部分内容,这样您就很幸运。
或者,您可以查看http响应标头中的content-length标头值,以了解长度,如果服务器告诉您它可能不是。