FFmpeg 소스코드 컴파일 환경 구축

ffmpeg는 동영상 개발에 가장 많이 사용되는 오픈 소스 소프트웨어입니다.

FFmpeg: FFmpeg는 비디오, 오디오 및 기타 멀티미디어 파일과 스트림을 처리하기 위한 라이브러리 및 프로그램의 방대한 소프트웨어 제품군으로 구성된 무료 오픈 소스 프로젝트입니다. 핵심은 비디오 및 오디오 파일의 명령줄 기반 처리를 위해 설계되었으며 형식 트랜스코딩, 기본 편집(트리밍 및 연결), 비디오 스케일링, 비디오 포스트 프로덕션 효과 및 표준 준수에 널리 사용되는 FFmpeg 프로그램 자체입니다. (SMPTE, ITU) . 摘自wikipedia

ffmpeg에는 방대한 기능이 있으며 개발자에게 풍부한 기능 라이브러리 호출을 제공합니다. 일반적으로 사용되는 기능 라이브러리는 다음과 같습니다.

  • libavcodec - 다양한 형식의 오디오 및 비디오 코덱

  • libavformat - 디코딩에 필요한 정보 획득, 오디오 및 비디오 데이터 읽기 등과 같은 기능을 포함하여 다양한 오디오 및 비디오 패키징 형식의 생성 및 분석

  • libswscale - 색 공간 변환 및 이미지 형식 변환을 위한 기능을 제공하는 비디오 이미지 스케일링용 라이브러리

  • libavutil - 산술 연산, 문자 연산 등을 포함한 도구 라이브러리

  • libpostproc - 동영상 전처리용 라이브러리

  • libpostproc - 필터 함수 라이브러리

  • libavdevice - 캡처 및 재생 장치에 대한 액세스를 제공합니다.

또한 ffmpeg는 개발자에게 풍부한 명령줄 도구를 제공합니다.ffmpeg에 익숙하지 않은 개발자를 위해 먼저 이러한 명령줄 도구를 사용하여 ffmpeg의 기본 기능에 대한 일반적인 이해를 가질 수 있습니다.정식 토론을 시작하겠습니다.

1. ffmpeg 설치

여기서는 Ubuntu 16 LTS 버전을 예로 들어 FFmpeg 설치를 소개합니다.

1.1 PPA 소스 추가

ffmpeg 4는 최신 릴리스 버전입니다. 이 버전을 설치하려면 PPA 소스를 추가해야 합니다. 다음 명령을 실행하여 Ubuntu 시스템에 PPA 웨어하우스를 추가합니다.

sudo add-apt-repository ppa:jonathonf/ffmpeg-4

1.2 ffmpeg 설치

다음 명령으로 ffmpeg를 설치합니다.

sudo apt-get update
sudo apt-get install ffmpeg

x264와 같은 관련 동적 라이브러리 파일도 함께 설치되는 것을 볼 수 있습니다.

sudo apt-get install ffmpeg
[sudo] password for ron: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libaom0 libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbs2b0 libchromaprint1 libcodec2-0.4
  libflite1 liblilv-0-0 libmysofa1 libnorm1 libopenjp2-7 libopenmpt0 libpgm-5.2-0 libpocketsphinx3 libpostproc55 librabbitmq4
  librubberband2v5 libserd-0-0 libsodium18 libsord-0-0 libsphinxbase3 libsratom-0-0 libsrt1-gnutls libswresample3 libswscale5
  libvdpau1 libvidstab1.1 libx264-155 libx265-192 libzmq5 mesa-vdpau-drivers vdpau-driver-all
Suggested packages:
  ffmpeg-doc serdi sordi libvdpau-va-gl1 nvidia-vdpau-driver nvidia-legacy-340xx-vdpau-driver
Recommended packages:
  pocketsphinx-hmm-en-hub4wsj | pocketsphinx-hmm-zh-tdt | pocketsphinx-hmm-en-tidigits pocketsphinx-lm-en-hub4
  | pocketsphinx-lm-zh-hans-gigatdt | pocketsphinx-lm-zh-hant-gigatdt
The following NEW packages will be installed:
  ffmpeg libaom0 libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbs2b0 libchromaprint1
  libcodec2-0.4 libflite1 liblilv-0-0 libmysofa1 libnorm1 libopenjp2-7 libopenmpt0 libpgm-5.2-0 libpocketsphinx3 libpostproc55
  librabbitmq4 librubberband2v5 libserd-0-0 libsodium18 libsord-0-0 libsphinxbase3 libsratom-0-0 libsrt1-gnutls libswresample3
  libswscale5 libvdpau1 libvidstab1.1 libx264-155 libx265-192 libzmq5 mesa-vdpau-drivers vdpau-driver-all
0 upgraded, 37 newly installed, 0 to remove and 233 not upgraded.
Need to get 29.2 MB of archives.
After this operation, 106 MB of additional disk space will be used.
Do you want to continue? [Y/n]

1.3 ffmpeg가 성공적으로 설치되었는지 확인

ffmpeg 설치가 완료된 후 ffmpeg -version 명령을 사용하여 FFmpeg 버전 번호를 인쇄할 수 있으며 성공적으로 인쇄할 수 있으면 ffmpeg 설치가 성공한 것을 확인할 수 있습니다.

ffmpeg -version

2. ffmpeg 소스 코드 컴파일

ffmpeg 소스 코드 컴파일에는 복잡한 컴파일 환경이 필요하지 않으며 기본 컴파일러와 종속 라이브러리만 필요합니다. ffmpeg는 여러 주류 플랫폼의 개발을 지원하며 여기서는 주로 Linux 환경에서 컴파일하는 방법을 설명합니다.

2.1 ffmpeg 컴파일 환경 준비

여기서는 우분투 시스템을 예로 들어 다른 Linux 배포판의 원칙도 비슷합니다. Linux 시스템에서 컴파일하려면 다음 명령으로 설치할 수 있는 gcc make 및 기타 구성 요소를 설치해야 합니다.

sudo apt-get install build-essential

gcc -v 명령을 입력하여 현재 gcc 버전 번호를 쿼리합니다.

gcc -v

2.2 ffmpeg 종속 라이브러리 준비

ffmpeg 소스 코드 컴파일은 주로 x264 및 yasm 두 구성 요소에 의존합니다.검색 엔진에서 소스 코드 패키지를 찾는 것은 매우 쉽습니다.소스 코드 패키지를 컴파일하고 설치하는 방법은 임베디드 환경에서도 사용할 수 있습니다.

x264: x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format, and is released under the terms of the GNU GPL.

Yasm: Yasm is a complete rewrite of the NASM assembler under the “new” BSD License,Yasm currently supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes, outputs binary, ELF32, ELF64, 32 and 64-bit Mach-O, RDOFF2, COFF, Win32, and Win64 object formats, and generates source debugging information in STABS, DWARF 2, and CodeView 8 formats.

소스 패키지의 링크 주소는 다음과 같습니다.

/pub/videolan/x264/snapshots/의 FFmpeg 인덱스 다운로드 다운로드 - Yasm Modular Assembler Project

[학습 주소]: FFmpeg/WebRTC/RTMP/NDK/Android 오디오 및 비디오 스트리밍 미디어의 고급 개발
[기사 혜택]: 더 많은 오디오 및 비디오 학습 자료 패키지, Dachang 인터뷰 질문, 기술 비디오 및 학습 로드맵을 무료로 받습니다. C/C++, Linux, FFmpeg webRTC rtmp hls rtsp ffplay srs 등) 필요하신 분들은 1079654574를 눌러 그룹에 가입하시면 받아보실 수 있습니다~

여기서 테스트한 소스 코드 버전은 다음과 같습니다.

x264-0.148 (x264 snapshot-20170307-2245)
yasm-1.3.0
ffmpeg-3.2.4

그 중 x264는 h.264 인코더를 지원하고, yasm은 어셈블리 최적화를 지원하는데 어셈블리 최적화 지원이 필요하지 않은 경우 컴파일 옵션(-disable-yasm)에서 yasm을 끌 수 있습니다.

Linux에서 컴파일 옵션은 다음과 같은 방법으로 구성할 수 있습니다.

2.2.1 yasm 구성 구성

./configure --prefix=/usr/local/3rdparty/yasm

2.2.2 x264 구성 구성

./configure --prefix=/usr/local/3rdparty/x264 --enable-shared --enable-static --enable-yasm

Makefile이 생성되면 make 명령어를 입력하여 컴파일을 시작하고 컴파일이 완료되면 make install 명령어를 실행하여 설치합니다.

make 
sudo make install

x264 및 yasm의 컴파일이 완료되면 시스템에서 해당 설치 위치를 찾을 수 있어야 합니다. /etc/profile 구성 파일을 열고 파일 하단에 각 구성 요소의 환경 변수를 추가합니다.

# YASM
export PATH="$PATH:/usr/local/3rdparty/yasm/bin/"
export LD_LIBRARY_PATH=/usr/local/3rdparty/yasm/lib:$LD_LIBRARY_PATH
# X264
export PATH="$PATH:/usr/local/3rdparty/x264/bin/"
export LD_LIBRARY_PATH=/usr/local/3rdparty/x264/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/3rdparty/x264/lib/pkgconfig:$PKG_CONFIG_PATH

source /etc/profile 명령을 사용하여 환경 변수 새로 고침

source /etc/profile

환경 변수 구성이 완료되면 다음 명령을 사용하여 x264와 같은 종속 구성 요소가 성공적으로 컴파일 및 설치되었는지 확인할 수 있습니다.

x264 --version
x264 0.148.x
built on May 22 2019, gcc: 5.4.0 20160609
x264 configuration: --bit-depth=8 --chroma-format=all
libx264 configuration: --bit-depth=8 --chroma-format=all
x264 license: GPL version 2 or later
yasm --version
yasm 1.3.0
Compiled on May  6 2015.
Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.

2.3 ffmpeg 소스 코드 컴파일

Linux에서 컴파일 옵션은 다음과 같은 방법으로 구성할 수 있습니다.

2.3.1 ffmpeg 구성 구성

./configure --prefix=/usr/local/3rdparty/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/3rdparty/x264/include --extra-ldflags=-L/usr/local/3rdparty/x264/lib

Makefile이 생성되면 make 명령어를 입력하여 컴파일을 시작하고 컴파일이 완료되면 make install 명령어를 실행하여 설치합니다.

make 
sudo make install

컴파일이 완료되면 ffmpeg, ffserver, ffprobe와 같은 명령줄 도구가 소스 코드 디렉토리에 생성되며, 그 중

  • ffmpeg - 비디오 코덱, 비디오 트랜스코딩, 비디오 형식 변환, 비디오 스트리밍 및 기타 기능을 지원하는 명령줄 도구

  • ffserver - 명령줄 도구는 ffmpeg와 협력하며 클라이언트의 스트리밍 미디어 요청에 응답하고 스트리밍 미디어 데이터를 클라이언트로 전송합니다.

  • ffprobe - 멀티미디어 파일의 설명 정보를 보기 위한 명령줄 도구

2.4 ffmpeg 환경 변수 구성

ffmpeg 및 종속 환경의 컴파일이 완료된 후 시스템은 해당 설치 위치를 찾을 수 있어야 합니다. /etc/profile 구성 파일을 열고 파일 하단에 각 구성 요소의 환경 변수를 추가합니다.

# FFMPEG
export PATH="$PATH:/usr/local/3rdparty/ffmpeg/bin/"
export LD_LIBRARY_PATH=/usr/local/3rdparty/ffmpeg/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/3rdparty/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH

source /etc/profile 명령을 사용하여 환경 변수 새로 고침

source /etc/profile

ffmpeg -version 명령을 사용하여 버전 번호를 인쇄합니다. 여기에 사용된 ffmpeg는 버전 3.2.4입니다.

ffmpeg -version
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
configuration: --prefix=/usr/local/3rdparty/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/3rdparty/x264/include --extra-ldflags=-L/usr/local/3rdparty/x264/lib
libavutil      55. 34.101 / 55. 34.101
libavcodec     57. 64.101 / 57. 64.101
libavformat    57. 56.101 / 57. 56.101
libavdevice    57.  1.100 / 57.  1.100
libavfilter     6. 65.100 /  6. 65.100
libswscale      4.  2.100 /  4.  2.100
libswresample   2.  3.100 /  2.  3.100
libpostproc    54.  1.100 / 54.  1.100

ffmpeg 소스 코드 경로 아래에서 ldd 명령을 사용하여 ffmpeg가 종속된 모든 구성 요소를 쿼리할 수 있습니다. 일부 구성 요소를 찾을 수 없는 경우 이 문서를 참조하여 환경을 구성하지 않은 종속 구성 요소가 있는지 확인해야 합니다. 변수. 마찬가지로 ldd 명령을 사용하여 해당 경로에서 x264와 같은 구성 요소의 종속성을 쿼리할 수도 있습니다.

ldd ffmpeg
    linux-vdso.so.1 =>  (0x00007ffc24f84000)
    libavdevice.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavdevice.so.57 (0x00007fc17da42000)
    libavfilter.so.6 => /usr/local/3rdparty/ffmpeg/lib/libavfilter.so.6 (0x00007fc17d613000)
    libavformat.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavformat.so.57 (0x00007fc17d1f3000)
    libavcodec.so.57 => /usr/local/3rdparty/ffmpeg/lib/libavcodec.so.57 (0x00007fc17bcbf000)
    libpostproc.so.54 => /usr/local/3rdparty/ffmpeg/lib/libpostproc.so.54 (0x00007fc17baa3000)
    libswresample.so.2 => /usr/local/3rdparty/ffmpeg/lib/libswresample.so.2 (0x00007fc17b887000)
    libswscale.so.4 => /usr/local/3rdparty/ffmpeg/lib/libswscale.so.4 (0x00007fc17b5ff000)
    libavutil.so.55 => /usr/local/3rdparty/ffmpeg/lib/libavutil.so.55 (0x00007fc17b385000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc17b07c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc17ae5f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc17aa95000)
    libXv.so.1 => /usr/lib/x86_64-linux-gnu/libXv.so.1 (0x00007fc17a890000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fc17a556000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fc17a344000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fc17a122000)
    libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fc179f1e000)
    libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007fc179d16000)
    libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007fc179b12000)
    libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007fc179812000)
    libSDL2-2.0.so.0 => /usr/local/3rdparty/sdl2/lib/libSDL2-2.0.so.0 (0x00007fc1794df000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc1792c5000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc1790c1000)
    libx264.so.148 => /usr/local/3rdparty/x264/lib/libx264.so.148 (0x00007fc178d1b000)
    liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fc178af9000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc17dc5a000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fc1788f5000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fc1786ef000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1784e7000)

원본 링크: ffmpeg 소스 코드 컴파일 환경 construction_ffmpeg 컴파일 환경_breakpointlab의 블로그-CSDN 블로그

Supongo que te gusta

Origin blog.csdn.net/irainsa/article/details/130630343
Recomendado
Clasificación