./configure \
--extra-cflags='-I/usr/include -static' \
--extra-ldflags='-I/usr/lib -static' \
--disable-debug \
--disable-shared \
--enable-static \
--enable-gpl \
--enable-libmp3lame \
--enable-nonfree \
--disable-logging \
--disable-avdevice \
--disable-swscale \
--disable-postproc \
--disable-dxva2 \
--disable-vaapi \
--disable-vda \
--disable-vdpau \
--disable-everything \
--disable-runtime-cpudetect \
--disable-swscale-alpha \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-htmlpages \
--disable-manpages \
--disable-podpages \
--disable-txtpages \
--enable-protocol=file \
--enable-protocol=pipe \
--enable-protocol=http \
--enable-protocol=https \
--enable-filter=aresample \
2.从第一步生成的config.h中,grep 想要安装的格式关键字,如想要安装mp3
fun@ubuntu:~/software/ffmpeg-2.2.2$ grep MP3 config.h
#define CONFIG_LIBMP3LAME 1
#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
#define CONFIG_MP3_DECODER 1
#define CONFIG_MP3FLOAT_DECODER 0
#define CONFIG_MP3ADU_DECODER 0
#define CONFIG_MP3ADUFLOAT_DECODER 0
#define CONFIG_MP3ON4_DECODER 0
#define CONFIG_MP3ON4FLOAT_DECODER 0
#define CONFIG_MP3_DEMUXER 1
#define CONFIG_LIBMP3LAME_ENCODER 1
#define CONFIG_MP3_MUXER 1
3.设置诸如encoder,decoder,muxer,demuxer对应项
--enable-libmp3lame \
--enable-decoder=mp3 \
--enable-demuxer=mp3 \
--enable-muxer=mp3 \
--enable-encoder=libmp3lame \
支持vorbis
--enable-libvorbis \
--enable-parser=vorbis \
--enable-encoder=vorbis \
--enable-decoder=vorbis \
--enable-encoder=libvorbis \
--enable-decoder=libvorbis \
--enable-muxer=ogg \
--enable-demuxer=ogg \
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.mp3 test.ogg
built on Mar 14 2015 01:24:30 with gcc 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
Input #0, mp3, from 'test.mp3':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.22, start: 0.138125, bitrate: 8 kb/s
Stream #0:0: Audio: mp3, 8000 Hz, mono, s16p, 8 kb/s
Output #0, ogg, to 'test.ogg':
Metadata:
encoder : Lavf55.33.100
Stream #0:0: Audio: vorbis (libvorbis), 8000 Hz, mono, fltp
Metadata:
encoder : Lavf55.33.100
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> libvorbis)
Press [q] to stop, [?] for help
size= 25kB time=00:00:10.08 bitrate= 20.3kbits/s
video:0kB audio:22kB subtitle:0 data:0 global headers:3kB muxing overhead 2.472099%
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.ogg ogg.mp3
Input #0, ogg, from 'test.ogg':
Duration: 00:00:10.09, start: 0.000000, bitrate: 20 kb/s
Stream #0:0: Audio: vorbis, 8000 Hz, mono, fltp, 22 kb/s
Metadata:
ENCODER : Lavf55.33.100
Output #0, mp3, to 'ogg.mp3':
Metadata:
TSSE : Lavf55.33.100
Stream #0:0: Audio: mp3 (libmp3lame), 8000 Hz, mono, fltp
Metadata:
ENCODER : Lavf55.33.100
Stream mapping:
Stream #0:0 -> #0:0 (vorbis -> libmp3lame)
Press [q] to stop, [?] for help
size= 10kB time=00:00:10.15 bitrate= 8.3kbits/s
video:0kB audio:10kB subtitle:0 data:0 global headers:0kB muxing overhead 2.534965%
支持wav
--enable-libwavpack \
--enable-muxer=wav \
--enable-demuxer=wav \
--enable-decoder=wavpack \
--enable-encoder=wavpack \
--enable-decoder=wav \
--enable-encoder=wav \
--enable-encoder=pcm_s16le \
--enable-decoder=pcm_s16le \
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.wav wav.mp3
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'test.wav':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.09, bitrate: 128 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Output #0, mp3, to 'wav.mp3':
Metadata:
TSSE : Lavf55.33.100
Stream #0:0: Audio: mp3 (libmp3lame), 8000 Hz, mono, s16p
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le -> libmp3lame)
Press [q] to stop, [?] for help
[libmp3lame @ 0x29fe940] Trying to remove 576 samples, but the queue is empty
size= 10kB time=00:00:10.15 bitrate= 8.3kbits/s
video:0kB audio:10kB subtitle:0 data:0 global headers:0kB muxing overhead 2.534965%
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.mp3 haha.wav
Input #0, mp3, from 'test.mp3':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.22, start: 0.138125, bitrate: 8 kb/s
Stream #0:0: Audio: mp3, 8000 Hz, mono, s16p, 8 kb/s
File 'haha.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'haha.wav':
Metadata:
ISFT : Lavf55.33.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> pcm_s16le)
Press [q] to stop, [?] for help
size= 158kB time=00:00:10.08 bitrate= 128.1kbits/s
video:0kB audio:158kB subtitle:0 data:0 global headers:0kB muxing overhead 0.049574%
部分从wav转mp3,遇到一下错误:
Input #0, wav, from '../resource/flac/1.wav':
Duration: 00:09:05.67, bitrate: 96 kb/s
Stream #0:0: Audio: pcm_u8 ([1][0][0][0] / 0x0001), 12000 Hz, mono, 96 kb/s
[abuffer @ 0x1a3b520] Unable to parse option value "(null)" as sample format
Last message repeated 1 times
[abuffer @ 0x1a3b520] Error setting option sample_fmt to value (null).
[graph 0 input from stream 0:0 @ 0x1a4fea0] Error applying options to the filter.
Error opening filters!
Conversion failed!
解决方法,加上编译参数
--enable-encoder=pcm_u8 \
--enable-decoder=pcm_u8 \
--enable-muxer=pcm_u8 \
--enable-demuxer=pcm_u8 \
支持aac
--enable-libvo-aacenc \
--enable-libfdk_aac \
--enable-libfaac \
--enable-parser=aac \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-encoder=libfaac \
--enable-encoder=libvo_aacenc \
--enable-encoder=libaacplus \
--enable-encoder=libfdk_aac \
--enable-decoder=libfdk_aac\
--enable-demuxer=aac \
--enable-muxer=adts \
./ffmpeg -i test.mp3 haha.aac
Input #0, mp3, from 'test.mp3':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.22, start: 0.138125, bitrate: 8 kb/s
Stream #0:0: Audio: mp3, 8000 Hz, mono, s16p, 8 kb/s
Output #0, adts, to 'haha.aac':
Metadata:
encoder : Lavf55.33.100
Stream #0:0: Audio: aac (libfdk_aac), 8000 Hz, mono, s16, 17 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> libfdk_aac)
Press [q] to stop, [?] for help
size= 22kB time=00:00:10.11 bitrate= 18.0kbits/s
video:0kB audio:22kB subtitle:0 data:0 global headers:0kB muxing overhead 0.000000%
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i haha.aac aac.mp3
[aac @ 0x15abd80] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from 'haha.aac':
Duration: 00:00:10.86, bitrate: 16 kb/s
Stream #0:0: Audio: aac, 8000 Hz, mono, fltp, 16 kb/s
File 'aac.mp3' already exists. Overwrite ? [y/N] y
Output #0, mp3, to 'aac.mp3':
Metadata:
TSSE : Lavf55.33.100
Stream #0:0: Audio: mp3 (libmp3lame), 8000 Hz, mono, fltp
Stream mapping:
Stream #0:0 -> #0:0 (aac -> libmp3lame)
Press [q] to stop, [?] for help
size= 11kB time=00:00:10.37 bitrate= 8.3kbits/s
video:0kB audio:10kB subtitle:0 data:0 global headers:0kB muxing overhead 2.482877%
支持mp2
--enable-encoder=mp2 \
--enable-decoder=mp2 \
--enable-muxer=mp2 \
--enable-decoder=mp2float \
--enable-encoder=mp2fixed \
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.mp3 test.mp2
Input #0, mp3, from 'test.mp3':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.22, start: 0.138125, bitrate: 8 kb/s
Stream #0:0: Audio: mp3, 8000 Hz, mono, s16p, 8 kb/s
Output #0, mp2, to 'test.mp2':
Metadata:
encoder : Lavf55.33.100
Stream #0:0: Audio: mp2, 16000 Hz, mono, s16, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> mp2)
Press [q] to stop, [?] for help
size= 159kB time=00:00:10.12 bitrate= 128.4kbits/s
video:0kB audio:159kB subtitle:0 data:0 global headers:0kB muxing overhead 0.000000%
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.mp2 mp2.mp3
[mp3 @ 0x1b77d80] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'test.mp2':
Duration: 00:00:10.29, start: 0.000000, bitrate: 126 kb/s
Stream #0:0: Audio: mp2, 16000 Hz, mono, s16p, 126 kb/s
File 'mp2.mp3' already exists. Overwrite ? [y/N] y
Output #0, mp3, to 'mp2.mp3':
Metadata:
TSSE : Lavf55.33.100
Stream #0:0: Audio: mp3 (libmp3lame), 16000 Hz, mono, s16p
Stream mapping:
Stream #0:0 -> #0:0 (mp2 -> libmp3lame)
Press [q] to stop, [?] for help
size= 30kB time=00:00:10.15 bitrate= 24.3kbits/s
video:0kB audio:30kB subtitle:0 data:0 global headers:0kB muxing overhead 0.733568%
flac 支持
--enable-encoder=flac \
--enable-decoder=flac \
--enable-demuxer=flac \
--enable-muxer=flac \
--enable-parser=flac \
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.mp3 test.flac
Input #0, mp3, from 'test.mp3':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.30, start: 0.138125, bitrate: 8 kb/s
Stream #0:0: Audio: mp3, 8000 Hz, mono, s16p, 8 kb/s
Output #0, flac, to 'test.flac':
Metadata:
encoder : Lavf55.33.100
Stream #0:0: Audio: flac, 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> flac)
Press [q] to stop, [?] for help
size= 92kB time=00:00:10.22 bitrate= 73.4kbits/s
video:0kB audio:84kB subtitle:0 data:0 global headers:0kB muxing overhead 9.643538%
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.flac flac.mp3
Input #0, flac, from 'test.flac':
Metadata:
ENCODER : Lavf55.33.100
Duration: 00:00:10.16, bitrate: 73 kb/s
Stream #0:0: Audio: flac, 8000 Hz, mono, s16
Output #0, mp3, to 'flac.mp3':
Metadata:
TSSE : Lavf55.33.100
Stream #0:0: Audio: mp3 (libmp3lame), 8000 Hz, mono, s16p
Stream mapping:
Stream #0:0 -> #0:0 (flac -> libmp3lame)
Press [q] to stop, [?] for help
[libmp3lame @ 0x1a913a0] Trying to remove 576 samples, but the queue is empty
size= 10kB time=00:00:10.22 bitrate= 8.3kbits/s
video:0kB audio:10kB subtitle:0 data:0 global headers:0kB muxing overhead 2.517361%
部分flac转mp3失败的原因之一是ffmpeg没有将图片格式编在里面的缘故,
在ffmpeg编译时添加以下参数
--enable-encoder=jpeg2000 \
--enable-encoder=mjpeg \
--enable-encoder=ljpeg \
--enable-encoder=jpegls \
--enable-decoder=jpeg2000 \
--enable-decoder=jpegls \
--enable-decoder=mjpeg \
--enable-decoder=mjpegb \
--enable-muxer=mjpeg \
--enable-demuxer=mjpeg \
--enable-encoder=png \
--enable-decoder=png \
--enable-parser=png \
加入图片支持后,以上转码依旧报错
Input #0, flac, from 'b1.flac':
Duration: 00:08:32.31, bitrate: 871 kb/s
Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
Stream #0:1: Video: mjpeg, yuvj420p(pc), 542x475 [SAR 96:96 DAR 542:475], 90k tbr, 90k tbn, 90k tbc
Metadata:
comment : Cover (front)
File 'test.mp3' already exists. Overwrite ? [y/N] y
'scale' filter not present, cannot convert pixel formats.
Error opening filters!
Conversion failed!
解决方法:
编译时添加scale的支持
--enable-swscale \
--enable-swscale-alpha \
--enable-filter=scale \
支持 ac3
--enable-encoder=ac3 \
--enable-decoder=ac3 \
--enable-encoder=ac3_fixed\
--enable-decoder=atrac3 \
--enable-decoder=atrac3p \
--enable-encoder=eac3 \
--enable-decoder=eac3 \
--enable-muxer=ac3 \
--enable-demuxer=ac3 \
--enable-muxer=eac3 \
--enable-demuxer=eac3 \
./ffmpeg -i test.mp3 test.ac3
Input #0, mp3, from 'test.mp3':
Metadata:
encoder : Lavf55.33.100
Duration: 00:00:10.30, start: 0.138125, bitrate: 8 kb/s
Stream #0:0: Audio: mp3, 8000 Hz, mono, s16p, 8 kb/s
Output #0, ac3, to 'test.ac3':
Metadata:
encoder : Lavf55.33.100
Stream #0:0: Audio: ac3, 8000 Hz, mono, fltp, 96 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> ac3)
Press [q] to stop, [?] for help
size= 119kB time=00:00:10.14 bitrate= 96.3kbits/s
video:0kB audio:119kB subtitle:0 data:0 global headers:0kB muxing overhead 0.000000%
fun@ubuntu:~/software/ffmpeg-2.2.2$ ./ffmpeg -i test.ac3 ac3.mp3
[ac3 @ 0x15a7d80] Estimating duration from bitrate, this may be inaccurate
Input #0, ac3, from 'test.ac3':
Duration: 00:00:10.18, start: 0.000000, bitrate: 96 kb/s
Stream #0:0: Audio: ac3, 8000 Hz, mono, fltp, 96 kb/s
Output #0, mp3, to 'ac3.mp3':
Metadata:
TSSE : Lavf55.33.100
Stream #0:0: Audio: mp3 (libmp3lame), 8000 Hz, mono, fltp
Stream mapping:
Stream #0:0 -> #0:0 (ac3 -> libmp3lame)
Press [q] to stop, [?] for help
size= 10kB time=00:00:10.22 bitrate= 8.3kbits/s
video:0kB audio:10kB subtitle:0 data:0 global headers:0kB muxing overhead 2.517361%
支持wma/wmv
--enable-decoder=wmalossless \
--enable-decoder=wmapro \
--enable-encoder=wmav1 \
--enable-decoder=wmav1 \
--enable-encoder=wmav2 \
--enable-decoder=wmav2 \
--enable-decoder=wmavoice \
--enable-demuxer=xwma \
--enable-demuxer=avi \
--enable-muxer=avi \
--enable-demuxer=asf \
--enable-muxer=asf \
--enable-encoder=wmv1 \
--enable-decoder=wmv1 \
--enable-encoder=wmv2 \
--enable-decoder=wmv2 \
--enable-decoder=wmv3 \
--enable-decoder=wmv3_crystalhd \
--enable-decoder=wmv3_vdpau \
--enable-decoder=wmv3image \
本次编译涉及所有配置项
./configure \
--extra-cflags='-I/usr/include -static' \
--extra-ldflags='-I/usr/lib -static' \
--disable-debug \
--disable-shared \
--enable-static \
--enable-gpl \
--enable-libmp3lame \
--enable-nonfree \
--disable-logging \
--disable-avdevice \
--disable-swscale \
--disable-postproc \
--disable-dxva2 \
--disable-vaapi \
--disable-vda \
--disable-vdpau \
--disable-everything \
--disable-runtime-cpudetect \
--disable-swscale-alpha \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-htmlpages \
--disable-manpages \
--disable-podpages \
--disable-txtpages \
--enable-protocol=file \
--enable-protocol=pipe \
--enable-protocol=http \
--enable-protocol=https \
--enable-filter=aresample \
--enable-decoder=mp3 \
--enable-demuxer=mp3 \
--enable-parser=mpegaudio \
--enable-muxer=mp3 \
--enable-encoder=libmp3lame \
--enable-version3 \
--enable-libvo-aacenc \
--enable-libfdk_aac \
--enable-libfdk-aac \
--enable-libfaac \
--enable-parser=aac \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-encoder=libfaac \
--enable-encoder=libvo_aacenc \
--enable-encoder=libaacplus \
--enable-encoder=libfdk_aac \
--enable-decoder=libfdk_aac\
--enable-demuxer=aac \
--enable-muxer=adts \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libvo_amrwbenc \
--enable-encoder=libvo_amrwbenc \
--enable-decoder=libopencore_amrnb \
--enable-encoder=libopencore_amrnb \
--enable-decoder=libopencore_amrwb \
--enable-decoder=amrnb \
--enable-decoder=amrwb \
--enable-muxer=amr \
--enable-demuxer=amr \
--enable-libwavpack \
--enable-muxer=wav \
--enable-demuxer=wav \
--enable-decoder=wavpack \
--enable-encoder=wavpack \
--enable-encoder=pcm_s16le \
--enable-decoder=pcm_s16le \
--enable-libvorbis \
--enable-parser=vorbis \
--enable-encoder=vorbis \
--enable-decoder=vorbis \
--enable-encoder=libvorbis \
--enable-decoder=libvorbis \
--enable-muxer=ogg \
--enable-demuxer=ogg \
--enable-decoder=mp1float \
--enable-decoder=mp1 \
--enable-encoder=mp2 \
--enable-decoder=mp2 \
--enable-muxer=mp2 \
--enable-decoder=mp2float \
--enable-encoder=mp2fixed \
--enable-encoder=flac \
--enable-decoder=flac \
--enable-demuxer=flac \
--enable-muxer=flac \
--enable-parser=flac \
--enable-encoder=ac3 \
--enable-decoder=ac3 \
--enable-encoder=ac3_fixed\
--enable-decoder=atrac3 \
--enable-decoder=atrac3p \
--enable-encoder=eac3 \
--enable-decoder=eac3 \
--enable-muxer=ac3 \
--enable-demuxer=ac3 \
--enable-muxer=eac3 \
--enable-demuxer=eac3 \
--enable-decoder=wmalossless \
--enable-decoder=wmapro \
--enable-encoder=wmav1 \
--enable-decoder=wmav1 \
--enable-encoder=wmav2 \
--enable-decoder=wmav2 \
--enable-decoder=wmavoice \
--enable-demuxer=xwma \
--enable-demuxer=avi \
--enable-muxer=avi \
--enable-demuxer=asf \
--enable-muxer=asf \
--enable-encoder=wmv1 \
--enable-decoder=wmv1 \
--enable-encoder=wmv2 \
--enable-decoder=wmv2 \
--enable-decoder=wmv3 \
--enable-decoder=wmv3_crystalhd \
--enable-decoder=wmv3_vdpau \
--enable-decoder=wmv3image \
--enable-encoder=jpeg2000 \
--enable-encoder=mjpeg \
--enable-encoder=ljpeg \
--enable-encoder=jpegls \
--enable-decoder=jpeg2000 \
--enable-decoder=jpegls \
--enable-decoder=mjpeg \
--enable-decoder=mjpegb \
--enable-muxer=mjpeg \
--enable-demuxer=mjpeg \
--enable-encoder=png \
--enable-decoder=png \
--enable-parser=png \
--enable-swscale \
--enable-swscale-alpha \
--enable-filter=scale \
--enable-encoder=pcm_u8 \
--enable-decoder=pcm_u8 \
--enable-muxer=pcm_u8 \
--enable-demuxer=pcm_u8 \
--enable-small \