LoginSignup
0
0

【ffmpeg】Unknown decoder 'libx265' エラー

Last updated at Posted at 2023-09-13

ffmpeg を使いエンコードしようとすると、Unknown decoder 'libx265'エラーがでます。しかし、x265 のコーデック libx256 はインストール済みです。

$ ffmpeg -loop 1 -vcodec libx265 -crf 30 -i background.png -i overlay.mp4 -filter_complex "[1]scale=680:-1[inner];[0][inner]overlay=66:218:shortest=1[out]" -map "[out]" -map 1:a -
c:a copy -y output.mp4
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.1 (Alpine 12.2.1_git20220924-r10) 20220924
  configuration: --prefix=/usr --disable-librtmp --disable-lzma --disable-static --disable-stripping --enable-avfilter --enable-gnutls --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librist --enable-libsoxr --enable-libsrt --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-lto --enable-pic --enable-postproc --enable-pthreads --enable-shared --enable-vaapi --enable-vdpau --enable-vulkan --optflags=-O3 --enable-libjxl --enable-libsvtav1 --enable-libvpl
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   5.  0.100 /  5.  0.100
  libpostproc    57.  1.100 / 57.  1.100
Unknown decoder 'libx265' # 👈 これ

$ # インストールはされている
$ apk list --installed *265*
x265-libs-3.5-r4 x86_64 {x265} (GPL-2.0-or-later) [installed]

TL; DR (今北産業)

  1. 引数のオプションの並びが間違っています
  2. 一般的なコマンドと違い、ffmpeg の引数はオプションであっても記載する順番に意味があるので注意します
  3. 出力のコーデック指定(-vcodec libx265 -crf 30)は出力直前に記載するのが吉です
ffmpeg \
    -loop 1 \
-   -vcodec libx265 -crf 30 \
    -i background.png \
    -i overlay.mp4 \
    -filter_complex "[1]scale=680:-1[inner];[0][inner]overlay=66:218:shortest=1[out]" \
    -map "[out]" \
    -map 1:a \
    -c:a copy -y \
+   -vcodec libx265 -crf 30 \
    output.mp4

TS; DR (静止画に縮小した動画を載せる例)

以下は、表題とは関係がないのですが、何をしているのか自分でも把握しておきたかったので、各々の引数(オプション)の意味を調べてみました。また、どうせ忘れるので自分のググラビリティとして。

Linux 環境(docker+alpine)で ffmpeg を使い、静止画の上に小さくリサイズした動画を載せたオーバーレイ動画を作りました。動画にテロップを載せるスーパーインポーズの逆、つまりテレビでいう「d ボタン」を押した時のような感じの動画です。

無事作成できたものの、動画サイズを小さくしようとコーデックx256 を使ったら Unknown decoder 'libx265' が出ました。しかし、x265 のコーデック libx256 はインストール済みです。

Youtube 向けに、サイズより画質優先で変換に時間がかかっていいのであれば H265 (x265) より AV1svt-av1-libs)の方が、何かと良い気がします。しかし、自分の場合は、Raspberry Pi で作ったサイネージ向けなので x256 で落ち着きました。

ffmpeg -loop 1 -i background.png -i overlay.mp4 -filter_complex "[1]scale=680:-1[inner];[0][inner]overlay=66:218:shortest=1[out]" -map "[out]" -map 1:a -c:a copy -y -vcodec libx265 -crf 30 output.mp4
オプションの詳細
ffmpeg \
    # ループ動画ではないので 1 回に指定
    -loop 1 \
    # 背景となる画像 (input[0])
    -i background.png \
    # オーバーレイさせる(上に載せる)動画 (input[1])
    -i overlay.mp4 \
    # フィルター(加工方法)の設定で、オーバーレイの詳細を定義する
    #   [1]scale=680:-1[inner]
    #     --> 2 番目の入力ソースを横幅 680px、高さは -1 で自動調整(アスペクト比の維持)で縮小・拡大
    #   overlay=66:218:shortest=1
    #     --> 設置先座標 x=66px, y=218px
    #   shortest=1[out]
    #     --> 出力の終了を動画の短い方に合わせる(画像はフレーム数が決まっていないので、動画に方に合わせる)
    -filter_complex "[1]scale=680:-1[inner];[0][inner]overlay=66:218:shortest=1[out]" \
    # 続く map 設定が出力ファイルが対象であることを指定
    -map "[out]" \
    # 入力ソース 2 (input[1]) のオーディオを利用する
    -map 1:a \
    # コンテナ(動画と音声のアーカイブ)のオーディオは、そのままコピー
    -c:a copy \
    # ファイルを上書き
    -y \
    # 出力動画のビデオ・コーデックを x265 を指定し、画質を 30 (範囲は 0-51、小さいほど高画質)
    -vcodec libx265 -crf 30 \
    # 出力先
    output.mp4
Dockerfile
FROM python:alpine

# Install dependencies
RUN apk --no-cache add \
    ffmpeg \
    ffmpeg-libs \
    x265-libs \
    gcc \
    musl-dev

RUN pip3 install yt-dlp --no-dependencies

WORKDIR /data
  • 検証環境

    $ sw_vers
    ProductName:	macOS
    ProductVersion:	12.6.9
    BuildVersion:	21G726
    
    $ docker -v
    Docker version 24.0.5, build ced0996
    
    $ docker run --rm python:alpine cat /etc/os-release | grep PRETTY_NAME
    PRETTY_NAME="Alpine Linux v3.18"
    
    $ docker run --rm python:alpine python --version
    Python 3.11.5
    
    $ docker run --rm python:alpine pip --version
    pip 23.2.1 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)
    

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0