ffmpeg window教程

292 阅读4分钟

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上面。