ねこにコベイン

にゃーにゃーにゃー

ffmpegをビルドしなおしてみましょう2021

新春特別企画。
CompilationGuide/Ubuntu – FFmpegを元ネタにffmpegをビルドするテスト、のおかわり。
AV1エンコーダが入ったり、上記ドキュメントも若干とはいえ半年前と変わっているので…
あとラジコがflash廃止したりいろいろ。

さいしょに

結論(ここを適切にコピペすれば以下は読まなくてよい)

YouTubeとラジコをダウンロードしたい人のためのffmpegビルド方法。
エラーが出ないように適当に切り貼ってください。
その他、目次【オマケ】は上記に対応するツール等の紹介・導入・設定・用法です。御笑覧。

sudo apt-get update -qq && sudo apt-get -y install \
  autoconf automake build-essential cmake git-core libass-dev \
  libfreetype6-dev libtool pkg-config texinfo wget zlib1g-dev
sudo apt -y install nasm libx264-dev libnuma-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev libaom-dev \
 libssl-dev libogg-dev libvorbis-dev libtheora-dev 
mkdir -p ~/ffmpeg_sources ~/bin
cd ~/ffmpeg_sources && \
  git -C SVT-AV1 pull 2> /dev/null || git clone https://github.com/AOMediaCodec/SVT-AV1.git && \
  mkdir -p SVT-AV1/build && \
  cd SVT-AV1/build && \
  PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && \
  PATH="$HOME/bin:$PATH" make -j4 && \
  make install && \
  cd
cd ~/ffmpeg_sources/ && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --disable-ffplay \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libsvtav1 \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libtheora \
  --enable-libx264 \
  --enable-libx265 \
  --enable-openssl \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make -j4 && \
make install && \
hash -r

趣旨

ffmpegのドキュメントを…毎回英語を読むのは億劫なのでメモしてみる。
公式wikiCompilationGuide/Ubuntu – FFmpegGeneral Documentation、及びconfigureのソース以外読む努力をする積りはない。
apt使ったインストールで済ませられるところは極力済ませる。←自分の中ではこれが一番大事

目的

  • radikoでラジオの録音がしたい。SSL対応。
  • youtube-dlで使えるようm4aとmp4くっつけたい。

元ネタの文書、CompilationGuide

CompilationGuide/Ubuntu – FFmpegは、「コンパイルしたくない人とかできない人向けにstaticビルドがUbuntuにはあるんだけどさあ、非フリーのエンコーダーってそこには入れられねえじゃん?ビルドエラー潰す楽しみも味わえねえし。*1」から始まる有名なビルド手順である。
その他「Ubuntuのaptで入るやつとか、極力邪魔したくねえんだよなあ」的な公式FAQ回答のスタンスを把握しながら、自分のスタンス(↑)を固めて折り合いを付ける。
つまり「いったん自分のホームディレクトリにインストールして、必要なら/usr/local/binにcpすれば?」という公式FAQ回答のとおりで進める。

必要なパッケージの導入・ディレクトリの作成

ffplayを削る

「サーバーユーザーでffplayが要らない人はさあ、」で始まるNoteを採用し、x11grabの依存関係のパッケージを導入しない。
具体的には後述のffmpegのconfigureで「--disable-ffplay」を指定している。
なお、以下sudoのあとに投入されるコマンドでは、あなたのパスワードを訊かれるので答えていただきたい。

$ sudo apt-get update -qq && sudo apt-get -y install \
  autoconf automake build-essential cmake git-core libass-dev \
  libfreetype6-dev libtool libvorbis-dev pkg-config texinfo wget zlib1g-dev

削ったffplayを再度オンにするときは以下のとおり。

ffmpegのconfigure時、--disable-ffplayも削るべし。

$ sudo apt -y install libsdl2-dev libva-dev libvdpau-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev

ディレクトリの作成

ホームにビルド用ディレクトリと、実行ファイルを置くディレクトリを切る。既にあるならば作らないでもよい。

$ mkdir -p ~/ffmpeg_sources ~/bin

必要なコンポーネントのビルドと導入

驚いたことにUbuntu20.04を使う分にはコンポーネント関連はほぼ野良ビルド不要…
でも少しでも新しいものを使いたい方は公式wikiを見て0.001でも新しい野良をぶち込むといいと思う。
そういう御仁のため、スクリプトを作ってくれている先人が居るので、紹介する。*2
LinuxでFFmpegをほぼ全自動でビルドする(CentOS、Ubuntu等に対応) | 自分に負けないラボラトリー

nasm、yasm、x264、x265、libvpx、libfdk-aac、libmp3lame、libopus、libaom

本稿時点のaptで導入されるバージョンが要件を満たしているのでaptから導入してよいハズ。
libaomもなんかstableなAPIがないのよね、みたいなコメントがあって、しばし待っとくれ、的なNoteがなされていたけど*3、パッケージがUbuntuにあるので入れたら通った。
たぶん大丈夫なんだろう。

$ sudo apt -y install nasm yasm libx264-dev libnuma-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev libaom-dev

theora

Ogg Vorbis作ってるとこの非可逆動画圧縮フォーマットらしい。あと、たぶんlibvorbisかlibopus導入時に入ってると思うけど気持ち悪いのでliboggも明示的に導入しておこう。

$ sudo apt -y install libogg-dev libtheora-dev

openssl

ウチではgnutlsをオンにしてビルドすると「それpkgconfigにないですから」というエラーが出ます。
うーん、何なんでしょうかね?公式どおりにビルドしてるつもりなんですけどねえ…
だもんでこっち。ライセンス?知るかバーカ。

$ sudo apt -y install libssl-dev

libsvtav1

AV1のエンコーダ。ffmpeg上では2021.1.1現在デコーダーの方はサポートされていないのだ、とのこと。
ていうか、libaomもAV1関係なんだけど、こいつはlibaom-av1よりエンコードが速い(てかlibaom-av1はメチャ遅い)とのことです。*4
こいつはUbuntu上にパッケージがないので、ビルドせざるを得ないみたいな感じでないかい?
ビルドの方のmakeに-j4オプションを追加とかすると並列コンパイルうんぬん。

あ、不要ならこの工程とffmpegのconfigureで「--enable-libsvtav1」を削るといいと思います。

cd ~/ffmpeg_sources && \
  git -C SVT-AV1 pull 2> /dev/null || git clone https://github.com/AOMediaCodec/SVT-AV1.git && \
  mkdir -p SVT-AV1/build && \
  cd SVT-AV1/build && \
  PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && \
  PATH="$HOME/bin:$PATH" make -j4 && \
  make install && \
  cd

FFmpeg

ビルドする。
下から3行目に-jオプション追加、「PATH="$HOME/bin:$PATH" make -j4 && \」などとすると4多重で並列でコンパイルが進んで終わるのが早くなる、のは、ご存じのとおりでは、ないでしょうか。

$ cd ~/ffmpeg_sources/ && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --disable-ffplay \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libsvtav1 \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libtheora \
  --enable-libx264 \
  --enable-libx265 \
  --enable-openssl \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make -j4 && \
make install && \
hash -r

いったんログアウトさせて、新たに開いたWSLでffmpegを開くと、ffmpegができているのが確認できる。以下のとおり動いているみたい。

$ ffmpeg
ffmpeg version N-100510-g4a160cb Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04)
  configuration: --prefix=/home/tangerine/ffmpeg_build --pkg-config-flags=--static
 --disable-ffplay --extra-cflags=-I/home/tangerine/ffmpeg_build/include
 --extra-ldflags=-L/home/tangerine/ffmpeg_build/lib --extra-libs='-lpthread -lm'
 --bindir=/home/tangerine/bin --enable-gpl --enable-libaom --enable-libass
 --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus
 --enable-libsvtav1 --enable-libvorbis --enable-libvpx --enable-libtheora
 --enable-libx264 --enable-libx265 --enable-openssl --enable-nonfree
  libavutil      56. 62.100 / 56. 62.100
  libavcodec     58.115.102 / 58.115.102
  libavformat    58. 65.100 / 58. 65.100
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 94.100 /  7. 94.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

ちなみにパスが通っていないため、man ffmpegをこの時点でするとドキュメントは出ずエラーになる。
ドキュメントをmanで出す設定等も公式wikiにあるが、~/ffmpeg_build/share/doc/ffmpegディレクトリをテキトーにWindowsから開きやすい所にコピってブラウザで開いた方が楽なんでないか。

再ビルド

アップデートほかffmpegを再ビルドしたい時は、前にビルドしたやつが残っているとうまくない場合があるのか、中間生成物等を削除する。

$ rm -rf ~/ffmpeg_build ~/bin/{ffmpeg,ffprobe,ffplay,x264,x265}

更にffmpegほか、各ディレクトリをmake cleanした後にmakeを始めんといかんのでは、ないだろうか…

$ cd ~/ffmpeg_sources/ffmpeg
$ make clean
(このほかにビルドしたコンポーネントがあれば各々のディレクトリでmake cleanを実行する。)

【オマケ】youtube-dl

GitHub - ytdl-org/youtube-dl: Command-line program to download videos from YouTube.com and other video sites

本体スクリプトの導入

しれーっとpython3周りの設定を導入している。Ubuntu20.04てpython2に関しては消極的だったと思うのと、ytdl自体はpython3でも動くので。
でもなんか最近コイツでも落とせないの多くない?

$ sudo apt -y install python-is-python3
$ sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl

オマケスクリプトと実行結果。

コケるときはコケるんであんまり信用しないこと。

$ cat mux.sh
#!/bin/bash
youtubename=`youtube-dl --get-filename $1`
echo $youtubename

videoname=`echo "$youtubename" | sed -e 's/webm\$/mp4/g'`
#videoname=`basename "$youtubename" .e`.mp4
echo $videoname

audioname=`echo $videoname | sed -e 's/mp4\$/m4a/g'`
#audioname=`basename "$youtubename" .e`.m4a
echo $audioname

muxname=`echo $videoname | sed -e 's/mp4\$/mux.mp4/g'`
#muxname=`basename "$youtubename" .e`.mux.mp4
echo $muxname

youtube-dl -F $1

echo -n "-f option [137,140]: "
read optcodec
if [ "$optcodec" = "" ]; then
   optcodec="137,140"
fi

youtube-dl -f $optcodec $1

ffmpeg -i "$videoname" -i "$audioname" -c:v copy -c:a copy "$muxname" && \
rm "$videoname" && rm "$audioname"
$ sudo chmod +x mux.sh 
$ ./mux.sh https://www.youtube.com/watch?v=_ZRp7KYXM1A
#StayHome #GWも家で一緒に-_ZRp7KYXM1A.mp4
#StayHome #GWも家で一緒に-_ZRp7KYXM1A.mp4
#StayHome #GWも家で一緒に-_ZRp7KYXM1A.m4a
#StayHome #GWも家で一緒に-_ZRp7KYXM1A.mux.mp4
[youtube] _ZRp7KYXM1A: Downloading webpage
[info] Available formats for _ZRp7KYXM1A:
format code  extension  resolution note
249          webm       audio only tiny   55k , opus @ 50k (48000Hz), 358.71KiB
250          webm       audio only tiny   72k , opus @ 70k (48000Hz), 471.76KiB
140          m4a        audio only tiny  130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 950.87KiB
251          webm       audio only tiny  137k , opus @160k (48000Hz), 939.03KiB
278          webm       256x144    144p   97k , webm container, vp9, 30fps, video only, 611.20KiB
160          mp4        256x144    144p  111k , avc1.4d400c, 30fps, video only, 482.46KiB
133          mp4        426x240    240p  191k , avc1.4d4015, 30fps, video only, 796.20KiB
242          webm       426x240    240p  221k , vp9, 30fps, video only, 1.03MiB
134          mp4        640x360    360p  343k , avc1.4d401e, 30fps, video only, 1.39MiB
243          webm       640x360    360p  406k , vp9, 30fps, video only, 1.78MiB
135          mp4        854x480    480p  571k , avc1.4d401f, 30fps, video only, 2.04MiB
244          webm       854x480    480p  677k , vp9, 30fps, video only, 2.66MiB
136          mp4        1280x720   720p  818k , avc1.4d401f, 30fps, video only, 3.19MiB
247          webm       1280x720   720p 1289k , vp9, 30fps, video only, 4.43MiB
248          webm       1920x1080  1080p 2483k , vp9, 30fps, video only, 11.15MiB
137          mp4        1920x1080  1080p 2670k , avc1.640028, 30fps, video only, 10.69MiB
18           mp4        640x360    360p  457k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 3.28MiB
22           mp4        1280x720   720p  575k , avc1.64001F, mp4a.40.2@192k (44100Hz) (best)
-f option [137,140]:
[youtube] _ZRp7KYXM1A: Downloading webpage
[info] _ZRp7KYXM1A: downloading video in 2 formats
[download] Destination: #StayHome #GWも家で一緒に-_ZRp7KYXM1A.mp4
[download] 100% of 10.69MiB in 00:01
[download] Destination: #StayHome #GWも家で一緒に-_ZRp7KYXM1A.m4a
[download] 100% of 950.87KiB in 00:00
[ffmpeg] Correcting container in "#StayHome #GWも家で一緒に-_ZRp7KYXM1A.m4a"
ffmpeg version N-97687-gd0705ec Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
  configuration: --prefix=/home/tangerine/ffmpeg_build --pkg-config-flags=--static --disable-ffplay --extra-cflags=-I/home/tangerine/ffmpeg_build/include --extra-ldflags=-L/home/tangerine/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/tangerine/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-openssl
  libavutil      56. 43.100 / 56. 43.100
  libavcodec     58. 83.100 / 58. 83.100
  libavformat    58. 43.100 / 58. 43.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 80.100 /  7. 80.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '#StayHome #GWも家で一緒に-_ZRp7KYXM1A.mp4':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6avc1mp41
    creation_time   : 2020-05-02T11:24:31.000000Z
  Duration: 00:01:00.06, start: 0.000000, bitrate: 1492 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 106 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 2020-05-02T11:24:31.000000Z
      handler_name    : ISO Media file produced by Google Inc.
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '#StayHome #GWも家で一緒に-_ZRp7KYXM1A.m4a':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf58.43.100
  Duration: 00:01:00.12, start: 0.000000, bitrate: 129 kb/s
    Stream #1:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      handler_name    : ISO Media file produced by Google Inc.
Output #0, mp4, to '#StayHome #GWも家で一緒に-_ZRp7KYXM1A.mux.mp4':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6avc1mp41
    encoder         : Lavf58.43.100
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 106 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc (default)
    Metadata:
      creation_time   : 2020-05-02T11:24:31.000000Z
      handler_name    : ISO Media file produced by Google Inc.
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      handler_name    : ISO Media file produced by Google Inc.
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 1800 fps=0.0 q=-1.0 Lsize=   11923kB time=00:01:00.09 bitrate=1625.4kbits/s speed=2.09e+03x
video:10921kB audio:939kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.525545%

何回試してもダウンロードできなくなる日が来たとき(原理上よく起こる)

次の二つを対応

  1. スクリプト本体の更新(「導入」をもっかいやる。)
  2. キャッシュ削除(以下のコマンド投入。)
$ youtube-dl --rm-cache-dir

【オマケ】rec_radiko.sh

簡易Radiko録音スクリプト · GitHub
こないだ*5FLASH廃止後のradikoに対応されました。バイバイswftools
radikoNHKが録音できるようになったため、radiru録音スクリプトはもう不要かも…
アレ?radikoプレミアムへの対応が無くなってる…そこは、後述するradishで対応可能かな。

xmllintの導入

$ sudo apt -y install libxml2-utils

rec_radiko.sh

$ cd ~
$ git clone https://gist.github.com/3956266.git
$ cp ~/3956266/rec_radiko.sh ~
$ chmod +x ~/rec_radiko.sh

実行例

perlのエラー警告が煩いですな。

$ ./rec_radiko.sh INT 1
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "ja_JP.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "ja_JP.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "ja_JP.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "ja_JP.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

【オマケ】rec_radiko_ts.sh

GitHub - uru2/rec_radiko_ts: Radiko timefree program recorder
タイムフリーというか、終わった番組を引っ張ってくるのはこっち。
実行例(3行目)の-uで指定するURLはradiko.jp公式のタイムフリーで聴きたい番組を選んで、アドレスバーからコピペすればよい。
ちなみに、タイムフリーで聞けない番組は、たぶん原理的に録音できない(サーバにないんだもん)。

$ wget https://raw.githubusercontent.com/uru2/rec_radiko_ts/master/rec_radiko_ts.sh
$ chmod +x rec_radiko_ts.sh
$ rec_radiko_ts.sh -u 'http://radiko.jp/#!/ts/INT/20200510200000'

【オマケ】らじるらじる

らじるらじる m3u8 を ffmpeg で録音する(8放送局)2017/9 以降対応 · GitHub
以下のコマンドのffmpegの-iオプションのURLは、M3U8というもので各(地方の)ラジオ局を表す。test.m4aが出力ファイル名なので併せて適宜変更されたい。

$ ffmpeg -i https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8 -t 15 -c copy test.m4a
ffmpeg version git-2020-04-05-bef3c14 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3.0 (GCC)
  configuration: --prefix=/usr/local/ffmpeg_build --extra-cflags=-I/usr/local/ffmpeg_build/include --extra-ldflags=-L/usr/local/ffmpeg_build/lib --extra-libs='-lm -lpthread' --bindir=/usr/local/ffmpeg_build/bin --pkg-config-flags=--static --enable-gpl --enable-nonfree --enable-libfreetype --enable-openssl --enable-pic --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora --enable-libvpx --enable-libass
  libavutil      56. 42.102 / 56. 42.102
  libavcodec     58. 77.101 / 58. 77.101
  libavformat    58. 42.100 / 58. 42.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 77.101 /  7. 77.101
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
[hls @ 0x324f140] Skip ('#EXT-X-VERSION:2')
[hls @ 0x324f140] Opening 'https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-20200320T020228-01-215/1190.ts' for reading
[hls @ 0x324f140] Opening 'https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-20200320T020228-01-215/1191.ts' for reading
Input #0, hls, from 'https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8':
  Duration: N/A, start: 24975.284811, bitrate: N/A
  Program 0
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
    Metadata:
      variant_bitrate : 0
Output #0, ipod, to 'test.m4a':
  Metadata:
    encoder         : Lavf58.42.100
    Stream #0:0: Audio: aac (HE-AAC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp
    Metadata:
      variant_bitrate : 0
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[https @ 0x327bec0] Opening 'https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-20200320T020228-01-215/1192.ts' for reading
size=      87kB time=00:00:14.97 bitrate=  47.6kbits/s speed= 802x
video:0kB audio:88kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

【オマケ】radish

GitHub - uru2/radish: Live streaming radio recoder
rec_radiko_ts.shの作者が作ったradiko録音スクリプト。イマドキはこっちらしい。
radiko以外にもいろいろ対応してるっぽいけど、よくわかんないや。

$ sudo apt install jq
$ cd ~
$ git clone https://github.com/uru2/radish.git
$ cp ~/radish/radi.sh ~
$ chmod +x ~/radi.sh

実行例

非常に便利だ。

$ ./radi.sh -t radiko -s ALPHA-STATION -d 1 -i RADIKO_PREMIUM_MAIL_ADDRESS -p RADIKO_PREMIUM_PASSWORD

*1:微妙にずれるかもだが、この辺のスタンスや、事情については、界隈を追っかけていた人(ほんとうはそういう変人呼ばわりしてはいけない位のエラいもんの様である。)の記事が端正な日本語で読めるので、紹介する。本の虫: ffmpegとlibavの背景事情。お家騒動、覚えてる人にとっては、嫌な事件だったね…

*2:もちろんこの投稿の元ネタもここだ。盛大にパクっているつもりなのに、志が全然違うんで全然違う結果になっているのはご愛敬。

*3:これぜんぜん音沙汰がないようにも見える。

*4:ffmpegでlibsvtav1エンコードをする【AV1】

*5:公式アナウンスでは2020.11.30、結局12/3まではflash録音可能だった。