㈠ 格式工厂的版权争议
由于格式工厂使用了FFmpeg的译码/编码算法,却以免费软件的形式发布并且没有公开源代码,违反FFmpeg的LGPL协议,于2009年7月22日登上了FFmpeg的“耻辱柱”上。开发方 Freetime 至今仍没有响应。
㈡ 如何使用ffmpeg
基本选项: -formats 输出所有可用格式 -f fmt 指定格式(音频或视频格式) -i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头 -y 覆盖已有文件 -t ration 记录时长为t -fs limit_size 设置文件大小上限 -ss time_off 从指定的时间(s)开始, [-]hh:mm:ss[.xxx]的格式也支持 -itsoffset time_off 设置时间偏移(s),该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持 -title string 标题 -timestamp time 时间戳 -author string 作者 -right string 版权信息 -comment string 评论 -album string album名 -v verbose 与log相关的 -target type 设置目标文件类型("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...) -dframes number 设置要记录的帧数 视频选项: -b 指定比特率(bits/s),似乎ffmpeg是自动VBR的,指定了就大概是平均比特率 -vb 指定视频比特率(bits/s) -vframes number 设置转换多少桢(frame)的视频 -r rate 桢速率(fps) -s size 分辨率 -aspect aspect 设置视频长宽比(4:3, 16:9 or 1.3333, 1.7777) -croptop size 设置顶部切除尺寸(in pixels) -cropbottom size 设置底部切除尺寸(in pixels) -cropleft size 设置左切除尺寸 (in pixels) -cropright size 设置右切除尺寸 (in pixels) -padtop size 设置顶部补齐尺寸(in pixels) -padbottom size 底补齐(in pixels) -padleft size 左补齐(in pixels) -padright size 右补齐(in pixels) -padcolor color 补齐带颜色(000000-FFFFFF) -vn 取消视频 -vcodec codec 强制使用codec编解码方式('' to stream) -sameq 使用同样视频质量作为源(VBR) -pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率 -passlogfile file 选择两遍的纪录文件名为file -newvideo 在现在的视频流后面加入新的视频流 高级视频选项 -pix_fmt format set pixel format, 'list' as argument shows all the pixel formats supported -intra 仅适用帧内编码 -qscale q 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好 -loop_input 设置输入流的循环数(目前只对图像有效) -loop_output 设置输出视频的循环数,比如输出gif时设为0表示无限循环 -g int 设置图像组大小 -cutoff int 设置截止频率 -qmin int 设定最小质量 -qmax int 设定最大质量 -qdiff int 量化标度间最大偏差 (VBR) -bf int 使用frames B 帧,支持mpeg1,mpeg2,mpeg4 音频选项: -ab 设置比特率(单位:bit/s,也许老版是kb/s) -aframes number 设置转换多少桢(frame)的音频 -aq quality 设置音频质量 (指定编码) -ar rate 设置音频采样率 (单位:Hz) -ac channels 设置声道数 -an 取消音频 -acodec codec 指定音频编码('' to stream) -vol volume 设置录制音量大小(默认为256) -newaudio 在现在的音频流后面加入新的音频流 字幕选项: -sn 取消字幕 -scodec codec 设置字幕编码('' to stream) -newsubtitle 在当前字幕后新增 -slang code 设置字幕所用的ISO 639编码(3个字母) Audio/Video 抓取选项: -vc channel 设置视频捕获通道(只对DV1394) -tvstd standard 设置电视标准 NTSC PAL(SECAM)
㈢ 我想用ffmpeg命令行转换一个视频文件,视、音频编码格式不变,只是将画面旋转90度,请问命令行该如何写
在你的转码命令里面添加上-vf rotate=PI/2或者-vf rotate=3*PI/2,例如
ffmpeg -i E:\ffmpeg\test.mp4 -y -vf rotate=PI/2 E:\ffmpeg\dest1.mp4
㈣ 优酷IKU我下载时怎么有这情况!!“抽取:无法写入文件ffmpeg.exe"有谁能教教我!!
iku本来就是一垃圾软件。
建议用维棠或硕鼠,土豆优酷搜狐爱奇艺央视网都可以下载,而且不受版权限制。下载的文件是mp4、flv,电脑上随便的播放器就能看。现在的安卓手机装个mobo也能看,根本不用转换。
另外用硕鼠必须要设置的,把“使用ID作为文件名前缀”、“使用来源作为文件名前缀”的勾去掉,然后勾选“自动合并分段视频”。
㈤ FFmpeg是不是比X264快
FFMPEG是目前被应用最广泛的编解码软件库,支持多种流行的编解码器,它是C语言实现的,不仅被集成到各种PC软件,也经常被移植到多种嵌入式设备中。使用面向对象的办法来设想这样一个编解码库,首先让人想到的是构造各种编解码器的类,然后对于它们的抽象基类确定运行数据流的规则,根据算法转换输入输出对象。
在实际的代码,将这些编解码器分成encoder/decoder,muxer/demuxer和device三种对象,分别对应于编解码,输入输出格式和设备。在main函数的开始,就是初始化这三类对象。在avcodec_register_all中,很多编解码器被注册,包括视频的H.264解码器和X264编码器等,
REGISTER_DECODER (H264, h264);
REGISTER_ENCODER (LIBX264, libx264);
找到相关的宏代码如下
#define REGISTER_ENCODER(X,x) { /
extern AVCodec x##_encoder; /
if(CONFIG_##X##_ENCODER) avcodec_register(&x##_encoder); }
#define REGISTER_DECODER(X,x) { /
extern AVCodec x##_decoder; /
if(CONFIG_##X##_DECODER) avcodec_register(&x##_decoder); }
这样就实际在代码中根据CONFIG_##X##_ENCODER这样的编译选项来注册libx264_encoder和h264_decoder,注册的过程发生在avcodec_register(AVCodec *codec)函数中,实际上就是向全局链表first_avcodec中加入libx264_encoder、h264_decoder特定的编解码器,输入参数AVCodec是一个结构体,可以理解为编解码器的基类,其中不仅包含了名称,id等属性,而且包含了如下函数指针,让每个具体的编解码器扩展类实现。
int (*init)(AVCodecContext *);
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
int (*close)(AVCodecContext *);
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
const uint8_t *buf, int buf_size);
void (*flush)(AVCodecContext *);
继续追踪libx264,也就是X264的静态编码库,它在FFMPEG编译的时候被引入作为H.264编码器。在libx264.c中有如下代码
AVCodec libx264_encoder = {
.name = "libx264",
.type = CODEC_TYPE_VIDEO,
.id = CODEC_ID_H264,
.priv_data_size = sizeof(X264Context),
.init = X264_init,
.encode = X264_frame,
.close = X264_close,
.capabilities = CODEC_CAP_DELAY,
.pix_fmts = (enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
};
这里具体对来自AVCodec得属性和方法赋值。其中
.init = X264_init,
.encode = X264_frame,
.close = X264_close,
将函数指针指向了具体函数,这三个函数将使用libx264静态库中提供的API,也就是X264的主要接口函数进行具体实现。pix_fmts定义了所支持的输入格式,这里4:2:0
PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
上面看到的X264Context封装了X264所需要的上下文管理数据,
typedef struct X264Context {
x264_param_t params;
x264_t *enc;
x264_picture_t pic;
AVFrame out_pic;
} X264Context;
它属于结构体AVCodecContext的void *priv_data变量,定义了每种编解码器私有的上下文属性,AVCodecContext也类似上下文基类一样,还提供其他表示屏幕解析率、量化范围等的上下文属性和rtp_callback等函数指针供编解码使用。
回到main函数,可以看到完成了各类编解码器,输入输出格式和设备注册以后,将进行上下文初始化和编解码参数读入,然后调用av_encode()函数进行具体的编解码工作。根据该函数的注释一路查看其过程:
1. 输入输出流初始化。
2. 根据输入输出流确定需要的编解码器,并初始化。
3. 写输出文件的各部分
重点关注一下step2和3,看看怎么利用前面分析的编解码器基类来实现多态。大概查看一下这段代码的关系,发现在FFMPEG里,可以用类图来表示大概的编解码器组合。
可以参考【3】来了解这些结构的含义(见附录)。在这里会调用一系列来自utils.c的函数,这里的avcodec_open()函数,在打开编解码器都会调用到,它将运行如下代码:
avctx->codec = codec;
avctx->codec_id = codec->id;
avctx->frame_number = 0;
if(avctx->codec->init){
ret = avctx->codec->init(avctx);
进行具体适配的编解码器初始化,而这里的avctx->codec->init(avctx)就是调用AVCodec中函数指针定义的具体初始化函数,例如X264_init。
在avcodec_encode_video()和avcodec_encode_audio()被output_packet()调用进行音视频编码,将同样利用函数指针avctx->codec->encode()调用适配编码器的编码函数,如X264_frame进行具体工作。
从上面的分析,我们可以看到FFMPEG怎么利用面向对象来抽象编解码器行为,通过组合和继承关系具体化每个编解码器实体。设想要在FFMPEG中加入新的解码器H265,要做的事情如下:
1. 在config编译配置中加入CONFIG_H265_DECODER
2. 利用宏注册H265解码器
3. 定义AVCodec 265_decoder变量,初始化属性和函数指针
4. 利用解码器API具体化265_decoder的init等函数指针
完成以上步骤,就可以把新的解码器放入FFMPEG,外部的匹配和运行规则由基类的多态实现了。
4. X264架构分析
X264是一款从2004年有法国大学生发起的开源H.264编码器,对PC进行汇编级代码优化,舍弃了片组和多参考帧等性能效率比不高的功能来提高编码效率,它被FFMPEG作为引入的.264编码库,也被移植到很多DSP嵌入平台。前面第三节已经对FFMPEG中的X264进行举例分析,这里将继续结合X264框架加深相关内容的了解。
查看代码前,还是思考一下对于一款具体的编码器,怎么面向对象分析呢?对熵编码部分对不同算法的抽象,还有帧内或帧间编码各种估计算法的抽象,都可以作为类来构建。
在X264中,我们看到的对外API和上下文变量都声明在X264.h中,API函数中,关于辅助功能的函数在common.c中定义
void x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height );
void x264_picture_clean( x264_picture_t *pic );
int x264_nal_encode( void *, int *, int b_annexeb, x264_nal_t *nal );
而编码功能函数定义在encoder.c
x264_t *x264_encoder_open ( x264_param_t * );
int x264_encoder_reconfig( x264_t *, x264_param_t * );
int x264_encoder_headers( x264_t *, x264_nal_t **, int * );
int x264_encoder_encode ( x264_t *, x264_nal_t **, int *, x264_picture_t *, x264_picture_t * );
void x264_encoder_close ( x264_t * );
在x264.c文件中,有程序的main函数,可以看作做API使用的例子,它也是通过调用X264.h中的API和上下文变量来实现实际功能。
X264最重要的记录上下文数据的结构体x264_t定义在common.h中,它包含了从线程控制变量到具体的SPS、PPS、量化矩阵、cabac上下文等所有的H.264编码相关变量。其中包含如下的结构体
x264_predict_t predict_16x16[4+3];
x264_predict_t predict_8x8c[4+3];
x264_predict8x8_t predict_8x8[9+3];
x264_predict_t predict_4x4[9+3];
x264_predict_8x8_filter_t predict_8x8_filter;
x264_pixel_function_t pixf;
x264_mc_functions_t mc;
x264_dct_function_t dctf;
x264_zigzag_function_t zigzagf;
x264_quant_function_t quantf;
x264_deblock_function_t loopf;
跟踪查看可以看到它们或是一个函数指针,或是由函数指针组成的结构,这样的用法很想面向对象中的interface接口声明。这些函数指针将在x264_encoder_open()函数中被初始化,这里的初始化首先根据CPU的不同提供不同的函数实现代码段,很多与可能是汇编实现,以提高代码运行效率。其次把功能相似的函数集中管理,例如类似intra16的4种和intra4的九种预测函数都被用函数指针数组管理起来。
x264_encoder_encode()是负责编码的主要函数,而其内包含的x264_slice_write()负责片层一下的具体编码,包括了帧内和帧间宏块编码。在这里,cabac和cavlc的行为是根据h->param.b_cabac来区别的,分别运行x264_macroblock_write_cabac()和x264_macroblock_write_cavlc()来写码流,在这一部分,功能函数按文件定义归类,基本按照编码流程图运行,看起来更像面向过程的写法,在已经初始化了具体的函数指针,程序就一直按编码过程的逻辑实现。如果从整体架构来看,x264利用这种类似接口的形式实现了弱耦合和可重用,利用x264_t这个贯穿始终的上下文,实现信息封装和多态。
本文大概分析了FFMPEG/X264的代码架构,重点探讨用C语言来实现面向对象编码,虽不至于强行向C++靠拢,但是也各有实现特色,保证实用性。值得规划C语言软件项目所借鉴。
㈥ ffmpeg 的使用问题
版权问题,里面某个编码器的原因,具体不说了,不只是QQ影音,暴风,迅雷播放器都被列入了
㈦ ffmpeg怎么批量处理任意类型的视频文件
@echooff
cd/d%~dp0
::设置要处理的视频格式
setExt=*.avi,*.mp4,*.wmv,*.flv,*.mkv,*.rmvb,*.rm,*.3gp
for%%ain(%Ext%)do(
rem这里写ffmpeg处理视频的命令,ffmpeg.exe不和脚本在一起话,请添加完整的路径
rem参数中需要加入原文件路径的,请用%%a代替。
ffmpeg参数1参数2参数3参数4..........
)
pause
大致的写法就是这样。
㈧ 怎样使用ffmpeg 进行音频解码
安装完成ffmpeg后,就可以使用ffmpeg进行音频文件格式转换。比如 ./ffmpeg -i /media/1.mp3 /media/1.wav, 通过该命令行可以将/media文件夹下1.mp3文件转换成WAV格式的。
但是反过来 ./ffmpeg -i /media/1.WAV /media/1.MP3 却不能转换成Mp3格式,提示如下错误(找不到编码器):
Stream mapping:
Stream #0:0 -> #0:0 (wav -> ?)
Encoder (codec none) not found for output stream #0:0
如果强行指定编码器 ./ffmpeg -i /media/1.wav -acodec mp3 /media/1.mp3, 仍提示找不到编码器错误:
Unknown encoder 'mp3'
这是因为,ffmpeg虽然是个开源软件,但因为具体格式的版权原因,它并没有包含所有的编解码格式,或者有个格式只有对应的解码器,但没有编码器,比如 Mp3就只有解码器,能播放Mp3文件,但却没有Mp3的编码器,无法将其它格式转换成Mp3。可以通过命令行 ./ffmpeg -codecs 查询编解码配置,第一个D表示Decoder,该格式能够解码;E表示Encoder,该格式可以编码。从中可以看出Mp3不能编码,Mp2倒是即可解码 也可编码。如何解决这个问题呢?
D A D mp1 MP1 (MPEG audio layer 1)
D A D mp1float MP1 (MPEG audio layer 1)
DEA D mp2 MP2 (MPEG audio layer 2)
D A D mp2float MP2 (MPEG audio layer 2)
D A D mp3 MP3 (MPEG audio layer 3)
D A D mp3a ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D mp3afloat ADU (Application Data Unit) MP3 (MPEG audio layer 3)
我的第一个方法是自己写代码来完成。源码文件中,Allcodecs.c中对各个格式进行注册,先修改Mp3的注册行,改为同时注册解码器和编码器:
REGISTER_ENCDEC (MP2, mp2);
REGISTER_DECODER (MP2FLOAT, mp2float);
REGISTER_DECODER (MP3, mp3) // 此行修改为 REGISTER_ENCDEC (MP3, mp3)
然后新增Mp3编码器的实现Struct,里面Init函数、encode函数、close函数使用Mp2的函数,因为我也不知道如何去实现Mp3的函数,或者说到代码实现级我也不知道Mp3和Mp2的区别在哪。
AVCodec ff_mp3_encoder = {
.name = "mp3",
.type = AVMEDIA_TYPE_AUDIO,
.id = CODEC_ID_MP3,
.priv_data_size = sizeof(MpegAudioContext),
.init = MPA_encode_init,
.encode = MPA_encode_frame,
.close = MPA_encode_close,
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
.supported_samplerates= (const int[]){44100, 48000, 32000, 22050, 24000, 16000, 0},
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
.defaults = mp3_defaults,
};
重新编译上线。 用命令行./ffmpeg -i /media/1.WAV /media/1.MP3 试了一下,能成功生成1.mp3文件,文件也能播放。似乎没有问题了,单用 file /media/1.mp3 查看了一下,发现文件不是Mp3格式的,而是Mp2格式的:
/media/1.mp3: MPEG ADTS, layer II, v1, 128 kbps, 44.1 kHz, Stereo
很遗憾,自行修改代码的方式行不通,因为不是每个编解码格式协议的专家,自行修改代码失败的风险很大,不仅是Mp3,还有一些其他格式比如AMR OGG H.263是没有编码器的。所以,第二个方案,使用成熟的第三方编码器和ffmpeg结合。
Mp3比较好的开源第三方库是libmp3lame(简称Lame)。我下了一个最新版本(3.99.4)的Lame源码,编译它:
首先配置: ./configure --prefix=/shared --enable-shared --enable-static
然后编译: make
make install
生成文件: 动态链接库 /shared/lib/libmp3lame.so 和 静态链接库 /shared/lib/libmp3lame.a。这里只需要使用动态链接库,将.so文件拷贝到/lib中,这个文件夹是动态链接库的默认搜索路径, 让ffmpeg运行时可以找到。
然后对ffmpeg配置libmp3lame: ./configure --enable-libmp3lame
重新编译ffmpeg,运行转化命令,看看效果如何。
首先执行 ./ffmpeg -codecs 查看可用编解码的变化,可以看到多出了libmp3lame编码器,带E的:
D V D lagarith Lagarith lossless
EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
EV ljpeg Lossless JPEG
D V D loco LOCO
然后执行 ./ffmpeg -i /media/1.WAV /media/1.MP3, 生成1.mp3,用File命令查看,确实是Mp3文件。
/media/1.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
大功告成,问题解决。
也可在命令行中指定编解码生成Mp3文件:./ffmpeg -i /media/1.WAV -acodec libmp3lame /media/1.MP3.
㈨ 怎么通过ffmpeg将音频文件转换成mp3 转
安装完成ffmpeg后,就可以使用ffmpeg进行音频文件格式转换。比如 ./ffmpeg -i /media/1.mp3 /media/1.wav, 通过该命令行可以将/media文件夹下1.mp3文件转换成WAV格式的。
但是反过来 ./ffmpeg -i /media/1.WAV /media/1.MP3 却不能转换成Mp3格式,提示如下错误(找不到编码器):
Stream mapping:
Stream #0:0 -> #0:0 (wav -> ?)
Encoder (codec none) not found for output stream #0:0
如果强行指定编码器 ./ffmpeg -i /media/1.wav -acodec mp3 /media/1.mp3, 仍提示找不到编码器错误:
Unknown encoder 'mp3'
这是因为,ffmpeg虽然是个开源软件,但因为具体格式的版权原因,它并没有包含所有的编解码格式,或者有个格式只有对应的解码器,但没有编码器,比如 Mp3就只有解码器,能播放Mp3文件,但却没有Mp3的编码器,无法将其它格式转换成Mp3。可以通过命令行 ./ffmpeg -codecs 查询编解码配置,第一个D表示Decoder,该格式能够解码;E表示Encoder,该格式可以编码。从中可以看出Mp3不能编码,Mp2倒是即可解码 也可编码。如何解决这个问题呢?
D A D mp1 MP1 (MPEG audio layer 1)
D A D mp1float MP1 (MPEG audio layer 1)
DEA D mp2 MP2 (MPEG audio layer 2)
D A D mp2float MP2 (MPEG audio layer 2)
D A D mp3 MP3 (MPEG audio layer 3)
D A D mp3a ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D mp3afloat ADU (Application Data Unit) MP3 (MPEG audio layer 3)
我的第一个方法是自己写代码来完成。源码文件中,Allcodecs.c中对各个格式进行注册,先修改Mp3的注册行,改为同时注册解码器和编码器:
REGISTER_ENCDEC (MP2, mp2);
REGISTER_DECODER (MP2FLOAT, mp2float);
REGISTER_DECODER (MP3, mp3) // 此行修改为 REGISTER_ENCDEC (MP3, mp3)
然后新增Mp3编码器的实现Struct,里面Init函数、encode函数、close函数使用Mp2的函数,因为我也不知道如何去实现Mp3的函数,或者说到代码实现级我也不知道Mp3和Mp2的区别在哪。
AVCodec ff_mp3_encoder = {
.name = "mp3",
.type = AVMEDIA_TYPE_AUDIO,
.id = CODEC_ID_MP3,
.priv_data_size = sizeof(MpegAudioContext),
.init = MPA_encode_init,
.encode = MPA_encode_frame,
.close = MPA_encode_close,
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
.supported_samplerates= (const int[]){44100, 48000, 32000, 22050, 24000, 16000, 0},
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
.defaults = mp3_defaults,
};
重新编译上线。 用命令行./ffmpeg -i /media/1.WAV /media/1.MP3 试了一下,能成功生成1.mp3文件,文件也能播放。似乎没有问题了,单用 file /media/1.mp3 查看了一下,发现文件不是Mp3格式的,而是Mp2格式的:
/media/1.mp3: MPEG ADTS, layer II, v1, 128 kbps, 44.1 kHz, Stereo
很遗憾,自行修改代码的方式行不通,因为不是每个编解码格式协议的专家,自行修改代码失败的风险很大,不仅是Mp3,还有一些其他格式比如AMR OGG H.263是没有编码器的。所以,第二个方案,使用成熟的第三方编码器和ffmpeg结合。
Mp3比较好的开源第三方库是libmp3lame(简称Lame)。我下了一个最新版本(3.99.4)的Lame源码,编译它:
首先配置: ./configure --prefix=/shared --enable-shared --enable-static
然后编译: make
make install
生成文件: 动态链接库 /shared/lib/libmp3lame.so 和 静态链接库 /shared/lib/libmp3lame.a。这里只需要使用动态链接库,将.so文件拷贝到/lib中,这个文件夹是动态链接库的默认搜索路径, 让ffmpeg运行时可以找到。
然后对ffmpeg配置libmp3lame: ./configure --enable-libmp3lame
重新编译ffmpeg,运行转化命令,看看效果如何。
首先执行 ./ffmpeg -codecs 查看可用编解码的变化,可以看到多出了libmp3lame编码器,带E的:
D V D lagarith Lagarith lossless
EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
EV ljpeg Lossless JPEG
D V D loco LOCO
然后执行 ./ffmpeg -i /media/1.WAV /media/1.MP3, 生成1.mp3,用File命令查看,确实是Mp3文件。
/media/1.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
大功告成,问题解决。
也可在命令行中指定编解码生成Mp3文件:./ffmpeg -i /media/1.WAV -acodec libmp3lame /media/1.MP3.