Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[FFmpeg] ffmpeg に libx265 をリンクする

More than 5 years have passed since last update.

2015-09-03 編集

この記事は ffmpeg Advent Calendar 2014 - Qiita の初日です。
初投稿。よろしくお願いします。

-- 以下本文

ffmpegがlibx265 エンコードに対応していたので更新

x265 のインストール

x265 wiki

hg バージョン確認

$ hg --version
Mercurial Distributed SCM (version 1.4)

Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

hg なければインストール

# yum install mercurial-1.4-3.el6.x86_64

libx265 ダウンロード

$ hg clone https://bitbucket.org/multicoreware/x265

cmake のバージョン確認

$ cmake -version
cmake version 2.8.8

x265のコンパイル時に警告された場合は更新する

libx265 ビルド/インストール

$ cd x265/build
$ cmake .
$ make
# make install

2015-09-03 現在

$ cd x265/build/linux
$ ./make-Makefiles.bash

BIN_INSTALL_DIR      -> /usr/local/bin
CMAKE_INSTALL_PREFIX -> /usr
LIB_INSTALL_DIR      -> /usr/local/lib

$ make
# make install
[ 63%] Built target common
[ 87%] Built target encoder
[ 87%] Built target x265-shared
[100%] Built target cli
[100%] Built target x265-static
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libx265.a
-- Installing: /usr/include/x265.h
-- Installing: /usr/include/x265_config.h
-- Installing: /usr/local/lib/libx265.so.74
-- Installing: /usr/local/lib/libx265.so
-- Installing: /usr/local/lib/pkgconfig/x265.pc
-- Installing: /usr/local/bin/x265
-- Removed runtime path from "/usr/local/bin/x265"

ffmpeg のインストール

download

$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
or
$ cd ffmpeg
$ git pull

プロキシ経由する場合は

$ git config --global https.proxy https://[host]:[port]/
$ git clone https://github.com/FFmpeg/FFmpeg ffmpeg

ffmpeg configure

下記は、最低限の設定です。

$ cd ffmpeg
$ ./configure \
--prefix=/usr/local \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-static \
--disable-shared \
--enable-libx265 \
--extra-cflags="-I/usr/local/include -I/usr/include" \
--extra-ldflags="-L/usr/local/lib" \
--enable-memalign-hack

[Error] x265 NOT FOUND

x265.h がエラーしてるっぽい。

# vi /usr/local/include/x265.h
  • 117行目あたり
/* Stores inter (motion estimation) analysis data for a single frame */
- struct x265_inter_data
+ typedef struct x265_inter_data
{
    uint32_t zOrder;
    int      ref[2];
    int      costZero[2];
    int16_t  mvx[2];
    int1y[2];
    uint32_t depth;
    int      poc;
    uint32_t cuAddr;
- };
+ } x265_inter_data;

/* Stores intra (motion estimation) analysis data for a single frame */
- struct x265_intra_data
+ typedef struct x265_intra_data
{
    uint8_t*  depth;
    uinmodes;
    char*     partSizes;
    int*      poc;
    uint32_t* cuAddr;
- };
+ } x265_intra_data;

/* Stores all analysis data for a single frame */
- struct x265_analysis_data
+ typedef struct x265_analysis_data
{
    x265_inter_data* interData;
    x265_intra_data* intraData;
    uint32_t         numCUsInFrame;
    uint32_t         numPartitions;
- };
+ } x265_analysis_data;

[Error] AVFoundation/AVFoundation.h file not found

gcc-objc がないらしい

2015-09-03 現在
間違っていそうなので調査中。

# yum install gcc-objc

[Error] x265.pc not found

$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

2015-09-03 現在
エラーメッセージが変更されている
x265 not found

./configureが通ったら

$ make
$ ./ffmpeg -version
ffmpeg version N-68129-g928322c Copyright (c) 2000-2014 the FFmpeg developers
built on Dec  1 2014 16:38:07 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
configuration: --prefix=/usr/local --enable-gpl --enable-version3 --enable-nonfree --enable-static --disable-shared --enable-libx265 --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --enable-memalign-hack
libavutil      54. 15.100 / 54. 15.100
libavcodec     56. 13.100 / 56. 13.100
libavformat    56. 15.101 / 56. 15.101
libavdevice    56.  3.100 / 56.  3.100
libavfilter     5.  2.103 /  5.  2.103
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100

ライブラリが正しくリンクされているかどうかの確認

$ ldd ./ffmpeg
[root@studiowebserv ffmpeg]# ldd ./ffmpeg
        linux-vdso.so.1 =>  (0x00007fff5a5ff000)
        libx265.so.38 => /usr/local/lib/libx265.so.38 (0x00007f4a29734000)
        libm.so.6 => /lib64/libm.so.6 (0x00000033a8e00000)
        libz.so.1 => /lib64/libz.so.1 (0x00000033a9a00000)
        librt.so.1 => /lib64/librt.so.1 (0x00000033a9e00000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00000033a9200000)
        libc.so.6 => /lib64/libc.so.6 (0x00000033a8a00000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000033af200000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000033ae200000)
        /lib64/ld-linux-x86-64.so.2 (0x00000033a8600000)

[Error] libx265.so.38 not found

確認事項

$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib

# ldconfig -v

インストール

# make install

$ ffmpeg -codecs | grep libx265

 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (encoders: libx265 )

以上。
FFmpegや各種ライブラリは、どんどんアップデートされますので、
上記方法でコンパイルできなくなることがあります。
ご了承ください。

pb_tmz08
Perl 生まれ。Linux育ち。今は、MySQLとPHPとJavaScript、FFmpegとかで遊んでいます。デザイン以外なんでもやる係。2016年からangular使い。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away