ffmpeg window教程
这段时间学习ffmpeg 其中安装问题就折腾了很久。
发现能写代码才是幸福的事, 环境配置简直就是折磨人。这个文章集合了之前我的操作步骤,方便以后学习 android端的cmd命令。
cygwin 教程
打开Cygwin包管理工具,点击setup-x86_64.exe
- gcc_g++
- make
- cmake
- automake
- gdb
- nasm
- yasm
- wget
- libSDL2-devel
- libSDL2_2.0_0
- libSDL2_image-devel
- libSDL2_image2.0_0
- libSDL2_mixer-devel
- libSDL2_mixer2.0_0
- libSDL2_net-devel
- libSDL2_net2.0_0
- xinit
- xorg-server
- xorg-server-xorg
- xorg-server-common
环境变量配置
vi /etc/profile
export DISPLAY=:0.0
安装apt-cyg
wget -c https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin
apt-cyg的作用
apt-cyg install xxx #安装xxx
apt-cyg search xxx #搜索安装包
如果安装包里setup里面找不到 yasm 和nasm 可以执行
apt-cyg install yasm nasm
yasm按编译方式安装
# 备注, 优先按setup.exe里选择后安装,
#如果找不到可以执行 apt—cyg install yasm
#如果以上2种都搞不定, 再按编译方式安装
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make && make install
nasm按编译方式安装
# 备注, 优先按setup.exe里选择后安装,
#如果找不到可以执行 apt—cyg install nasm
#如果以上2种都搞不定, 再按编译方式安装
wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
tar xvf nasm-2.13.03.tar.gz
cd nasm-2.13.03
./configure
make && make install
编译fdk-aac
wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac0.1.6.tar.gz
tar xvf fdk-aac-0.1.6.tar.gz
cd fdk-aac-0.1.6
./configure
make && make install
#这里先执行环境变量
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
增加环境变量 ,防止以后忘记了
vi /etc/profile
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
编译安装lame
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -xzf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make && make install
问题一: 在Cygwin下安装 lame的时候遇到执行 ./configure 失败的情况。如 "error: cannot guess build type;you must sepcify one",对这个问题可以通过下面的步骤来解决:
安装automake。可以通过 which automake来确认automake 是否已经安装。如果没有安装,可以通使用 apt-cyg install automake进行安装。
- 确认automake当前版本。
- 可执行autuomake --version获取当前automake的版本号。
将 lame目录下的 config.guess文件替换为 /usr/share/automake-version下的config.guess 文件。
例如:
cp /usr/share/automake-1.11/config.guess 下载路径/lame-3.99.5/config.guess
问题二: make时出现 "error: '_O_BINARY' undeclared (first use in this function)"的错误。 解决办法如下:打开出错文件 vi ./frontend/lametime.c将下面这段代码注释掉。
/*
#elif defined __CYGWIN
setmod(fileno(fp), _O_BINARY);
*/
安装x264
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-
master.tar.bz2
bunzip2 x264-master.tar.bz2
tar -vxf x264-master.tar
./configure --enable-static --enable-shared --disable-asm --disable-avs
make && make install
安装ffmpeg
#从ffmpeg官网下载代码编译, 编译方法如下:
wget -c https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
bunzip2 ffmpeg-4.0.2.tar.bz2
cd ffmpeg-4.0.2.tar.bz2
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64
--enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --
enable-debug --disable-optimizations --enable-shared --disable-static --enable-ffplay --enable-sdl2 --enable-libmp3lame --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
make && make install
测试ffmpeg
1. ffmpeg 命令
先启动服务: window系统-> 开始菜单 -> Cygwin-X -> 启动 XWin Server
$ ffmpeg.exe -i sin.mp4 out.flv
ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 11 (GCC)
configuration: --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared --disable-static --enable-ffplay --enable-sdl2 --enable-libmp3lame --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sin.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: isommp41mp42
creation_time : 2022-03-17T06:43:30.000000Z
copyright :
copyright-eng :
Duration: 00:00:12.10, start: 0.000000, bitrate: 466 kb/s
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 854x480, 413 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default)
Metadata:
creation_time : 2022-03-17T06:43:30.000000Z
handler_name : Core Media Video
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 47 kb/s (default)
Metadata:
creation_time : 2022-03-17T06:43:30.000000Z
handler_name : Core Media Audio
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> flv1 (flv))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, flv, to 'out.flv':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: isommp41mp42
copyright-eng :
copyright :
encoder : Lavf58.12.100
Stream #0:0(und): Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 854x480, q=2-31, 200 kb/s, 30 fps, 1k tbn, 30 tbc (default)
Metadata:
creation_time : 2022-03-17T06:43:30.000000Z
handler_name : Core Media Video
encoder : Lavc58.18.100 flv
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
Stream #0:1(und): Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 44100 Hz, mono, fltp (default)
Metadata:
creation_time : 2022-03-17T06:43:30.000000Z
handler_name : Core Media Audio
encoder : Lavc58.18.100 libmp3lame
frame= 363 fps=0.0 q=31.0 Lsize= 980kB time=00:00:12.12 bitrate= 662.5kbits/s speed=31.2x
video:872kB audio:95kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.380921%
转化失败问题 :
$ ffmpeg.exe -i sin.mp4 out.flv #提示失败Sample rate must be 11025 , 22050 or 44100
解决方式1:
ffmpeg.exe -i sin.mp4 -ar 44100 out.flv
解决方式2:
重新编译ffmpeg 编译时增加 mp3lame
2. ffplay命令
ffplay.exe sin.mp4
正常情况:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sin.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: isommp41mp42
creation_time : 2022-03-17T06:43:30.000000Z
copyright :
copyright-eng :
Duration: 00:00:12.10, start: 0.000000, bitrate: 466 kb/s
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 854x480, 413 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default)
Metadata:
creation_time : 2022-03-17T06:43:30.000000Z
handler_name : Core Media Video
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 47 kb/s (default)
Metadata:
creation_time : 2022-03-17T06:43:30.000000Z
handler_name : Core Media Audio
ffplay执行问题:
Could not initialize SDL - No available video device
(Did you set the DISPAY_variable>)
解决方法: setup.exe 里安装好SDL2和Xorg相关的lib
3. ffprobe命令测试
$ ffprobe.exe out.flv
ffprobe version 4.0.2 Copyright (c) 2007-2018 the FFmpeg developers
built with gcc 11 (GCC)
configuration: --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared --disable-static --enable-ffplay --enable-sdl2 --enable-libmp3lame --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Input #0, flv, from 'out.flv':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: isommp41mp42
copyright-eng :
copyright :
encoder : Lavf58.12.100
Duration: 00:00:12.15, start: 0.000000, bitrate: 661 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, mono, fltp, 64 kb/s
Stream #0:1: Video: flv1, yuv420p, 854x480, 200 kb/s, 30 fps, 30 tbr, 1k tbn
window下执行官网exe
下载编译好的exe
下载链接: ffmpeg.org/
选择window系统的下载包, 下载后解压就可以用了。
这种方式比较简单就不啰嗦了, 但是官网的exe
有个问题, 就是ffplay 按了w没有切换音频的显示,这个暂时我也不明白,等以后搞明白了,再更新到blog上面。