精华内容
下载资源
问答
  • MP3 Splitter & Joiner 是一款非常有用的 MP3 编辑软件,它内建了 MP3 分割与合并模块。你可以使用它把一个较大的 MP3 文件剪切、调整 为多个较小的片段,也可以把多个小片段合并为一个大文件,整个过程简单而快速。...
  • 编辑器 流星MP3歌词编辑器VB源代码,一边听歌一边编辑歌词,有操作方便的时间标签,适时控制音乐位置,不可以根据需要设置音乐播放速度,它一共可以设置四个时间标签,当然实际中可能用不了那么多,程序作者是为...
  • MP3文件信息编辑利器 - Mp3tag

    千次阅读 2006-01-08 15:07:00
    Mp3tag是一款免费的MP3文件信息的编辑软件。为了整理我的MP3文件库,我一直在寻找一款好用的MP3标签的编辑软件,以前曾经用过一个叫Tag & M3U的软件,不错,但不是免费的。后来发现了Mp3tag,第一次用感觉不是很好...

      Mp3tag是一款免费的MP3文件信息的编辑软件。为了整理我的MP3文件库,我一直在寻找一款好用的MP3标签的编辑软件,以前曾经用过一个叫Tag & M3U的软件,不错,但不是免费的。后来发现了Mp3tag,第一次用感觉不是很好上手,而且对中文的支持不是很出色,所以就把它束之高阁了。直到有一天,突然发现Mp3tag开始支持Unicode,才又把它请进了系统,真正开始使用,这才发现这是一款非常出色的Mp3tag的修改工具。
      跟常见的MP3文件信息编辑工具比较,Mp3tag有以下突出的特点:
      ·免费
      ·支持Unicode
      ·文件信息的导出和导入的功能
      ·功能强大,非常强大的自定义操作的功能(适合高级用户),支持正则表达式
      ·直接访问freedb获取CD或MP3的文件信息
      ·支持acc,flac,ape,ogg,mp3,wma等多种文件格式
      在确认了这是一款符合我的需求的软件后,圣诞节那天,我通过PayPal为作者捐赠了2欧元(这是个免费软件,所以这不是注册费用,而是自愿的捐赠),表达自己对这个软件的支持,并表示愿意为这个软件制作简体中文界面的语言包。
      开发这款软件的作者是一个德国人,Florian Heidenreich,我通过邮件与他联系后,很快收到了回复,他同意我进行软件的汉化工作。于是我就开始把这个软件中涉及到的650+个字符串进行翻译。并在此过程中时刻与作者保持联系,同时也为软件找出了一些Bug和提出了一些改进意见。新年到来时,翻译工作全部完成。
      1月7号,Mp3tag发布了最新的2.35版本,包含了简体中文的界面包。只要是在简体中文的操作系统中安装,就可以获得简体中文的软件界面。
      由于是第一次做软件汉化工作,经验非常缺乏,有些句子的翻译可能并不是很流畅,欢迎大家试用这个Mp3tag软件,如果发现有什么地方翻译的有问题,欢迎向我指正。
      Mp3tag的官方网址:http://www.mp3tag.de/en
      Mp3tag 2.35版国内下载地址:http://218.4.51.99/grzy/lifanxi/mp3tagv235setup.exe

    展开全文
  • mp3封面、专辑、作者等信息的解析

    千次阅读 2019-05-18 17:16:41
    常见mp3文件由 标签 + mp3音频数据 组成,标签中记录了封面图片、专辑、作者等信息 主流的mp3标签使用ID3格式,格式说明:http://id3.org/id3v2.3.0 再分享一个很好用的标签编辑工具,给你的mp3文件带上封面:...

    常见mp3文件由 标签 + mp3音频数据 组成,标签中记录了封面图片、专辑、作者等信息

    主流的mp3标签使用ID3格式,格式说明:http://id3.org/id3v2.3.0

    再分享一个很好用的标签编辑工具,给你的mp3文件加上封面:http://www.id3tageditor.com/

    不带标签的mp3文件
    不带标签的mp3文件
    带标签的mp3文件
    在这里插入图片描述
    带标签的mp3文件,数据实际起始位置
    在这里插入图片描述

    展开全文
  • 如何给MP3加封面呢,当然用iturns,千千静听当然是可以的,但是如果用程序来自动加封面呢,研究linux的ffmpeg,发现用这个加专辑信息还是容易的,但是封面始终加不上,无法,去研究mp3文件的编码吧 用来描述MP3信息...

    一个需求,用户上传的mp3需要给自动加上用户传的封面图,

    研究linux的ffmpeg,发现用这个加专辑信息还是容易的,但是封面始终加不上,无法,去研究mp3文件的编码吧

    用来描述MP3信息的head有两个大版本,分别是idv2和idv3,idv2放在文件尾部,只能描述一些简单的信息,idv3就厉害了,可以添加图片,和其它各种信息,包括自定义信息(做一些防盗版的事儿也可以)

    我们只研究 idv3,它放在文件头

    idv3也有几个常用的版本,一个是idv3.3一个是idv3.4两者区别不大,就是frame中的长度idv3.4 改成了sync safe integer ,其它相同,但是idv3.4只有iturns和一些比较先进的播放器能识别出来,比如windows 8 的mediaplay 就无法识别出来,这样在windows的文件夹中,那张封面图就木有了,所以,我们主要研究idv3.3

    idv3.3分 header和frame ,header描述 整个idv3.3的长度啊,和一些常见信息 共10bytes,frame可以有多个,比如专辑名,作者名,就是两个frame

    每个frame也有它的头,也是10个字节,下面具体描述

    header 共10个字节

    1-3  字节 字符串

    ID3

    4     字节  整数 

    表示版本号 正常是03 或者 04,03就是idv3.3 ,04就是idv3.4

    5    字节 整数

    小版本号 不管它

    6    一个flags 

    不管它 用0即可

    7-10 字节 一个无符号整数

    表示整个id3头的长度,这里的长度是个synchsafe integer,具体这个是啥,你可以去百度搜,我这儿只提供个算法,将该数字转义成真正的长度(不包括这个头的长度)

    def decode(x):  #如果按照正常算法得到的是synchsafe integer,解析成 真正的整数大小
        a = x & 0xff;
        b = (x >> 8) & 0xff;
        c = (x >> 16) & 0xff;
        d = (x >> 24) & 0xff;
        x_final = 0x0;
        x_final = x_final | a;
        x_final = x_final | (b << 7);
        x_final = x_final | (c << 14);
        x_final = x_final | (d << 21);
        return x_final
    
    def encode(x): #和上边相反
        a = x & 0x7f;
        b = (x >> 7) & 0x7f;
        c = (x >> 14) & 0x7f;
        d = (x >> 21) & 0x7f;
        
        x_final = 0x0;
        x_final = x_final | a;
        x_final = x_final | (b << 8);
        x_final = x_final | (c << 16);
        x_final = x_final | (d << 24);
        return x_final


    首先将那个4个字节的无符号整形转成整数n,这个整数并不是真正的长度,然后调decode(n)

    如果你要将一个整数转化成syncsafe integer 那么调encode()函数即可

    一个header的例子    ID3| 0x03| 0x00 | 0x00 | 0x00000013

    那么意思是idv3的版本,decode(0x00000013)的长度,全部是大端编码 big-endian

    到这儿id3的头就说完啦

    下面讲frame,每个frame也有一个固定的格式,每个frame 都有一个头

    也是10个字节

    1-4 字节 字符串

    TPE1 ,TIT2 ,TALB 具体去查http://id3.org/id3v2.3.0

    5-8字节 一个无符号整形 大端编码

    表示这个frame的长度,不包括这个10个字节的头(v3.4的版本这儿也是sync safe integer 需要decode,v3.3就不用啦)

    9-10字节  两个 0 不管他

    每个frame还有一个体,体也是有格式滴复杂的咱不说,只说最常用的,第一个字节表示编码,0就是普通编码,在win上就是gbk,在linux系列就是utf8

    所以如果是在win上的能正确解析的到 linux上就是乱码咧,如果你默认用utf8,win上是解析不出来滴,

     那如果我们选择1呢,1就是unicode,unicode是啥编码,说是ucs-2 这个是神马东东,其实就是utf16,所以,第一个字节,咱们用1,然后内容用utf16编码,两个平台就兼容啦

    例子  

    TPE1|0x00000012|0x0000

    0x01|content 

    长度12的content编码是utf16

    普通的frame是这个样子,还有我们的关键 frame,图片

    图片的的frame头和上边一样,也是10个字节 ,但是体 稍微不同

    第一个字节还是编码,选0就成,然后是 mime type 就是图片格式比如 image/jpeg 或者是image/png 然后跟一个0x00 表示格式结束

    然后再来个一个字节表示图片用途,比如封面是03,但是用03 有问题,不知道为啥,所以都是用0

    然后一个是描述,没用 用0就行

    然后就是图片数据开始啦,将图片打开,然后read数据到这儿就成了

    例子

    APIC|0x00001234|0x0000   头

    0x00|image/jpeg0x00|0x00|0x00 content(比如一个jpg的图片 是0xFFD8打头)

    噢了,下边是我写的一个读写mp3 idv3信息的小python代码

    # -*- coding: utf8 -*-
    import struct
    
    def decode(x):  #如果按照正常算法得到的synchsafe integer,解析成 真正的整数大小
        a = x & 0xff;
        b = (x >> 8) & 0xff;
        c = (x >> 16) & 0xff;
        d = (x >> 24) & 0xff;
        x_final = 0x0;
        x_final = x_final | a;
        x_final = x_final | (b << 7);
        x_final = x_final | (c << 14);
        x_final = x_final | (d << 21);
        return x_final
    
    def encode(x): #和上边相反
        a = x & 0x7f;
        b = (x >> 7) & 0x7f;
        c = (x >> 14) & 0x7f;
        d = (x >> 21) & 0x7f;
        
        x_final = 0x0;
        x_final = x_final | a;
        x_final = x_final | (b << 8);
        x_final = x_final | (c << 16);
        x_final = x_final | (d << 24);
        return x_final
    

    class MP3:
        def __init__(self,path):
            self.path = path
            pass
        def getInfo(self):
            fp = open( self.path,'rb');
            head = fp.read(10)
            id3,ver,revision,flag,length  = struct.unpack("!3sBBBI",head);
            length = decode(length)
            data = []
            while True:
                frame = fp.read(10)
                fid,size,flag,flag2 = struct.unpack("!4sI2B",frame)
                if size==0: #有时候会留1024的白 不知道为啥
                    break
                if ver==4:   #就是这一点 4和3的不同之处,4的这儿也采用synchsafe integer 了,注意啊
                    size = decode(size)
                content = fp.read(size)
                data.append((fid,content))
                length-= (size+10)
                print length
                if length<=0:
                    break
            fp.close()
            return data
        def buildItem(self,flag,content):
            content = content.decode('utf8').encode("utf16")
            content = struct.pack('!B',1)+content
            length = len(content)
            head = struct.pack('!4sI2B',flag,length,0,0);
            return head + content
            
        def addImage(self,image,data):
            fp = open( self.path,'rb');
            head = fp.read(10)
            try:
                id3,ver,revision,flag,length  = struct.unpack("!3sBBBI",head);
            except:
                return False;
            if id3 != 'ID3':
                return False
            #新建立个文件
            fpNew = open(self.path+'.bak',"wb");
            fpImage = open(image,"rb")
            imageData = fpImage.read() #待用
            originLength = decode(length) #真实长度
            length = 0
            
            imageDataPre = struct.pack("!B10s2BB",0,'image/jpeg',0,0,0)
            imageData = imageDataPre+imageData
            apicLen = len(imageData)  #图片数据区域长度
            imageDataHead = struct.pack("!4sI2B",'APIC',apicLen,0,0)
            imageData  = imageDataHead+imageData
            
            
            TPE1 =  self.buildItem('TPE1', data[u'Artist'].encode("utf8"))
            TIT2 = self.buildItem('TIT2', data[u'Title'].encode("utf8"))
            TALB = self.buildItem('TALB', data[u'Album'].encode("utf8"))
            
            #新长度
            length += len(imageData)
            length += len(TPE1)
            length += len(TIT2)
            length += len(TALB)
            
            header = head[0:3]
            header += struct.pack('!B',3)
            header += struct.pack('!H',0)
            #1字节留白
            header += struct.pack("!I",encode(length+1))
            
            fpNew.write(header)
            fpNew.write(TPE1)
            fpNew.write(TIT2)
            fpNew.write(TALB)
            fpNew.write(imageData)
            fpNew.write(struct.pack('!B',0))
            
            fp.seek(originLength,1) #跳
            fpNew.write(fp.read())
            fpNew.close()
            fp.close()
            fpImage.close()

    展开全文
  • RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态...

    RxFFmpeg

    项目地址:microshow/RxFFmpeg 

    简介: 🔥RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态贴纸和 gif 动态贴纸,添加字幕,添加滤镜,添加背景音乐,加速减速视频,倒放音视频,音频裁剪,变声,混音,图片合成视频,视频解码图片等主流特色功能

    更多:作者   提 Bug   

    标签:

     

    Language: English

    RxFFmpeg.svguploading.4e448015.gif转存失败重新上传取消    

    图 -1:logo

    RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能(视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态贴纸和 gif 动态贴纸,添加字幕,添加滤镜,添加背景音乐,加速减速视频,倒放音视频,音频裁剪,##百变魔音##,混音,图片合成视频,视频解码图片等主流特色功能……

    【官方 App】下载体验

    扫码 or 点击下载
    apk-qr.pnguploading.4e448015.gif转存失败重新上传取消图 -1:扫码下载体验

    编译环节

    编译环境

    • win10 + ubuntu 16.04 + gcc + make

    主要依赖以下库进行编译

    库名版本下载地址
    FFmpeg4.0http://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2
    X264x264-snapshot-20180212-2245-stablehttp://download.videolan.org/x264/snapshots/x264-snapshot-20180212-2245-stable.tar.bz2
    mp3lame3.100https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
    fdk-aac0.1.6https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
    ndkandroid-ndk-r14b-linux-x86_64https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip

    编译脚本

    特色功能

    • 支持任何 FFmpeg 命令执行

    • 支持 FFmpeg 命令执行进度回调

    • 支持中断 FFmpeg 命令

    • 支持同步/异步执行

    • 支持开启/关闭 debug 模式

    • 支持硬件加速,使编解码处理更快(已开启 MediaCodec)

    • 代码封装成 SDK 的方式,方便依赖使用

    • 支持把 FFmpeg 的各子模块 libavutil libavcodec libavformat libavdevice libavfilter libswscale libswresample libpostproc 最终打包成一个 librxffmpeg-core.so 核心库方便依赖使用,无需导入七八个 so 库

    • 支持 libx264 编码库,可以使压缩后的视频体积变的极小,清晰度还保持着很高清,简单的压缩命令: ffmpeg -y -i /storage/emulated/0/1/input.mp4 -b 2097k -r 30 -vcodec libx264 -preset superfast /storage/emulated/0/1/result.mp4

    • 支持添加 mp3、aac、wav 等主流格式的背景音乐

    • 支持主流视频格式转换,如: avi > mp4 > avi

    • 每隔一秒截取一张图 ffmpeg -y -i /storage/emulated/0/1/input.mp4 -f image2 -r 1 -q:v 10 -preset superfast /storage/emulated/0/1/%3d.jpg

    使用方式

    Gradle

    在根目录下的 build.gradle 里添加 maven 仓库

    
    allprojects {
            repositories {
                ...
                maven { url 'https://www.jitpack.io' }
            }
        }
    

    添加依赖,最新版本RxFFmpeg.svguploading.4e448015.gif转存失败重新上传取消

    
    dependencies {
        implementation 'com.github.microshow:RxFFmpeg:2.4.0'
    }
    

    如果你的 App 只要 v7a 平台,可以只保留 armeabi-v7a,不过推荐加上 arm64-v8a 架构,这样性能会大大提升

     

    
    defaultConfig {
        .
        .
        .
        ndk {
            abiFilters "armeabi-v7a","arm64-v8a"
        }
    }
    

    开始

    • 开启/关闭 debug 模式,建议在 Application 初始化调用
    
        RxFFmpegInvoke.getInstance().setDebug(true);
    
    • FFmpeg 命令执行 (RxJava2 优雅的调用)
    
        private void runFFmpegRxJava() {
    
            String text = "ffmpeg -y -i /storage/emulated/0/1/input.mp4 -vf boxblur=25:5 -preset superfast /storage/emulated/0/1/result.mp4";
    
            String[] commands = text.split(" ");
    
            myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);
    
            //开始执行 FFmpeg 命令
            RxFFmpegInvoke.getInstance()
                    .runCommandRxJava(commands)
                    .subscribe(myRxFFmpegSubscriber);
    
        }
    
        public static class MyRxFFmpegSubscriber extends RxFFmpegSubscriber {
    
            private WeakReference<HomeFragment> mWeakReference;
    
            public MyRxFFmpegSubscriber(HomeFragment homeFragment) {
                mWeakReference = new WeakReference<>(homeFragment);
            }
    
            @Override
            public void onFinish() {
                final HomeFragment mHomeFragment = mWeakReference.get();
                if (mHomeFragment != null) {
                    mHomeFragment.cancelProgressDialog("处理成功");
                }
            }
    
            @Override
            public void onProgress(int progress, long progressTime) {
                final HomeFragment mHomeFragment = mWeakReference.get();
                if (mHomeFragment != null) {
                    //progressTime 可以在结合视频总时长去计算合适的进度值
                    mHomeFragment.setProgressDialog(progress, progressTime);
                }
            }
    
            @Override
            public void onCancel() {
                final HomeFragment mHomeFragment = mWeakReference.get();
                if (mHomeFragment != null) {
                    mHomeFragment.cancelProgressDialog("已取消");
                }
            }
    
            @Override
            public void onError(String message) {
                final HomeFragment mHomeFragment = mWeakReference.get();
                if (mHomeFragment != null) {
                    mHomeFragment.cancelProgressDialog("出错了 onError:" + message);
                }
            }
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            if (myRxFFmpegSubscriber != null) {
                myRxFFmpegSubscriber.dispose();
            }
        }
    
    • FFmpeg 命令执行 (同步方式)
    
        RxFFmpegInvoke.getInstance().runCommand(command, null);
    
    • 中断 FFmpeg 命令
    
        RxFFmpegInvoke.getInstance().exit();
    
    • 构建命令,使用 RxFFmpegCommandList 构建,可以有效避免路径带有空格等问题
    
        public static String[] getBoxblur() {
            RxFFmpegCommandList cmdlist = new RxFFmpegCommandList();
            cmdlist.append("-i");
            cmdlist.append("/storage/emulated/0/1/input.mp4");
            cmdlist.append("-vf");
            cmdlist.append("boxblur=5:1");
            cmdlist.append("-preset");
            cmdlist.append("superfast");
            cmdlist.append("/storage/emulated/0/1/result.mp4");
            return cmdlist.build();
        }
    
    • 获取媒体文件信息
    
        RxFFmpegInvoke.getInstance().getMediaInfo(String filePath);
    

    代码混淆

    -dontwarn io.microshow.rxffmpeg.**
    -keep class io.microshow.rxffmpeg.**{*;}
    

    优质项目

    GSYVideoPlayer (Android 端的视频播放器神器)

    AiSound 百变魔音 (一个神奇的魔法声音)

    RetrofitGO (轻量级的网络请求库-支持缓存配置)

    常用命令

    常用命令汇总

    FFmpeg 文档汇总

    FFmpeg Filters 文档

    ScreenShot

    图 -1:screenShot.gif

    性能比对:arm64-v8a VS armeabi-v7a

    图 -2:arm64-v8a 图 -1:armeabi-v7a

    总结:可以看出 arm64-v8a 架构的运行效率远大于 armeabi-v7a,强烈建议在你的 App 添加 arm64-v8a 架构的 so,同时也是响应 Google 的号召。

    实验室

    抖音首页视频翻页

    • 视频适配方案

      • 竖屏视频:高宽比例 >= 16/9,则全屏铺满,反之采取第二方案
      • 横屏及其他比例视频:宽度铺满,高度自适应,背景虚化效果
    • 视频播放器基于 ExoPlayer(轻量级播放器)

    • 支持直播视频

    • 支持视频预缓存

    图 -1:screen_douyin_home.gif

    展开全文
  • mp3 分割合并器

    2012-09-23 03:12:16
    本软件也支持对分割或合并的 MP3 文件的 ID3 标签进行编辑。由于使用了直接处理技术,它可以完全保持与原始 MP3 相同的声音品质。 MP3 Splitter & Joiner Pro 是 MP3 Splitter & Joiner 的增强版本。 相对于 MP3 ...
  •  ■支持编辑作者自动保存功能;  ■和速配歌词完美无缝结合,利用速配歌词8万首歌词的资源,直接从速配歌词内导入Lrc歌词、导入Txt格式歌词,省去用户Lrc歌词编辑寻找歌词的麻烦;  ■Lrc歌词制作好后,可以通过...
  • mp3 ID3详解

    2012-12-12 13:47:09
     ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下:  char Header[3]; /*标签头必须是"TAG"否则认为没有标签*/  char Title[30]...
  • 百度富文本编辑器的使用

    万次阅读 2016-05-21 13:41:37
    2. 从官网上下载完整源码包,解压到任意目录,解压后的源码目录结构如下所示: dialogs:弹出对话框对应的资源和JS文件 lang:编辑器国际化显示的文件 themes:样式图片和样式文件 php/jsp/.net:涉及到服务器端操作...
  • 修改MP3文件的ID3信息

    2010-03-05 15:00:20
    ID3标签是MP3音乐档案中的歌曲附加讯息,它能够在MP3中附加曲子的演出者、作者以及其它类别资讯,方便众多乐曲的管理。缺少ID3标签并不会影响 MP3的播放,但若没有的话,管理音乐文件也会相当的麻烦。如果你在网上...
  • MP3文件格式

    2012-03-16 17:35:39
    1, MP3简介 MP3是今天一种常见的音乐格式,但恐怕除了工作要求之外,有兴趣对此进行研究的人恐怕不多。所以,当我打算做MP3解码方面的工作时,在找资料时也颇费了一番周折,同时也觉得很有趣。所以想在这里分享...
  • Mp3文件格式的说明

    2009-07-17 08:59:59
    D3V1 比较简单,它是存放在MP3 文件的末尾,用16 进制的编辑器打开一个MP3 文件,查看其末尾 的128 个顺序存放字节,数据结构定义如下: typedef struct tagID3V1 { char Header[3]; /*标签头必须是"TAG"否则认为...
  • 一些我们下载的Mp3歌曲名称是错的,但我们怎么能快速的把这些歌曲的名字修改正确呢。Follow me!(在实际运行代码时,发现Mp3的Tag中存的信息并不都是准确的,并且有时得到的歌曲名字中有”?”。在网上搜了好久也是...
  • MP3文件格式解析

    2014-01-06 16:24:14
    1, MP3简介 MP3是今天一种常见的音乐格式,但恐怕除了工作要求之外,有兴趣对此进行研究的人恐怕不多。所以,当我打算做MP3解码方面的工作时,在找资料时也颇费了一番周折,同时也觉得很有趣。所以想在这里分享...
  • MP3文件格式分析

    2011-02-14 11:58:00
    MP3文件格式分析
  • MP3格式音频文件结构解析

    千次阅读 2018-01-02 18:19:30
    MP3格式音频文件结构解析 转自 http://blog.csdn.net/fulinwsuafcie/article/details/8972346 原创 2013年05月25日 01:21:52 标签: 57673 编辑 删除 一、概述 Layer-3 音频文件,MPEG...
  • Ubuntu下听mp3

    千次阅读 2006-08-07 16:51:00
    作者: jhuangjiahua要让 Ubuntu 自带的 Totem 和 rhythmbox 音乐播放器可以放 MP3 的话请sudo apt-get install gstreamer0.8-mad同时,要让 rhythmbox 正常显示装 mp3 中文标签,可以sudo sh -c echo "GST_ID3_TAG_...
  • MP3 ID3

    2009-07-07 10:39:00
    ID3简介 ID3标签是MP3音乐档案中的歌曲附加讯息,它能够在MP3中附加曲子的演出者、作者以及其它类别资讯,方便众多乐曲的管理。缺少ID3标签并不会影响MP3的播放,但若没有的话,管理音乐文件也会相当的麻烦。如果你...
  • MP3 文件格式

    2014-04-02 22:40:53
    MP3 文件格式 一.概述: MP3 文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频 文件,MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组,特指活动影音...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,359
精华内容 2,943
关键字:

编辑mp3作者