🎆

FFmpeg8.0でWhisperを使って字幕ファイルを書き出す

に公開

準備

検証環境について

前の記事でも軽く書きましたが、せっかくffmpegも8.0になったので、改めて構築方法を見直してみます。vagrantなのでroot前提でもお気楽で良いかなと思いましたが、さすがに乱暴かなと思い一般ユーザーでの作業に落とし込んでいます。

nasmはcrbからのインストールにしました。最新バージョンではないですがAVX-512サポートはできているバージョンなのでまあいいかなと。またこの後画質検証などもしたいと思い、追加でVMAFも組み込んであります。

またffmpeg 8.0からMacのSafariでも再生できるようにパッケージングしてくれるようになったので、AV1とVP9の組み合わせでのHLSも作っていけるようにVPXも組み込みました。

あとはWhisperで使用したい音声コーデックなどがあれば追加で組み込むぐらいですかね。まあ一旦は動作確認という事でこれくらいでやってみたいと思います。

構築手順

sudo dnf -y update
sudo dnf -y groupinstall "Development Tools"
sudo dnf config-manager --set-enabled crb
sudo dnf -y install nasm cmake meson ninja-build

mkdir ffmpeg_build && cd $_
curl -LO https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2 \
     -LO https://github.com/webmproject/libvpx/archive/refs/tags/v1.15.2.tar.gz \
     -LO https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v3.1.0/SVT-AV1-v3.1.0.tar.gz \
     -LO https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz \
     -LO https://github.com/Netflix/vmaf/archive/refs/tags/v3.0.0.tar.gz \
     -LO https://github.com/ggml-org/whisper.cpp/archive/refs/tags/v1.7.6.tar.gz

# H.264
tar jxf x264-master.tar.bz2
cd x264-master
./configure --disable-opencl --enable-shared
make && sudo make install
cd ..

# VP9
tar xf v1.15.2.tar.gz
cd libvpx-1.15.2
./configure --disable-vp8 --disable-examples --disable-unit-tests --disable-docs
make && sudo make install
cd ..

# AV1
tar xf SVT-AV1-v3.1.0.tar.gz
cd SVT-AV1-v3.1.0/Build
cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
make && sudo make install
cd ../..

# Opus
tar zxf opus-1.5.2.tar.gz
cd opus-1.5.2
./configure
make && sudo make install
cd ..

# VMAF
tar xf v3.0.0.tar.gz
cd vmaf-3.0.0
meson setup libvmaf build --buildtype release
ninja -C build
sudo ninja -C build install
cd ..

# Whisper.cpp
tar xf v1.7.6.tar.gz
mkdir -p whisper.cpp-1.7.6/build
cd whisper.cpp-1.7.6/build
cmake -DBUILD_SHARED_LIBS=ON ..
make && sudo make install
cd ../..

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig"

# FFmpeg
git clone --depth 1 https://git.ffmpeg.org/ffmpeg.git -b release/8.0
cd ffmpeg
./configure --enable-gpl --enable-openssl --enable-version3 --enable-shared --enable-libx264 --enable-libvpx --enable-libsvtav1 --enable-libopus --enable-libvmaf --enable-whisper
make && sudo make install
cd ..

echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/ffmpeg.conf
echo "/usr/local/lib64" | sudo tee -a /etc/ld.so.conf.d/ffmpeg.conf
sudo ldconfig

こんな感じですかね。長く使う環境ではないのであまりチューニングはしていません。

検証

下準備

echo "192.168.0.100:/usr/share/nginx/html /home/vagrant/html nfs defaults 0 0" | sudo tee -a /etc/fstab
mkdir html
sudo systemctl daemon-reload
sudo mount -a

あとはnginxのサーバと分割しました。なので共有ディレクトリをマウントするところから始めます。

モデルの用意

mkdir -p work_whisper/models && cd $_
# https://huggingface.co/kotoba-tech/kotoba-whisper-v2.0-ggml
curl -LO https://huggingface.co/kotoba-tech/kotoba-whisper-v2.0-ggml/resolve/main/ggml-kotoba-whisper-v2.0.bin
cd ..

日本語音声を扱う事が多いので、日本語のモデルを使用させてもらいます。
https://huggingface.co/kotoba-tech/kotoba-whisper-v2.0
公式にて既にbin化されたファイルが公開されているのでそちらをダウンロードし使用します。なんという有難い話。

字幕の書き出し

https://www.stream.co.jp/company/greetings_2023n/

ffmpeg -i https://eqz989uscl.eq.webcdn.stream.ne.jp/www50/eqz989uscl/jmc_pub/jmc_pd/00011/c65a4faf8b6f4a5c8cd5eb1605f861c1.m3u8 -vn -af "whisper=model=models/ggml-kotoba-whisper-v2.0.bin:language=auto:queue=3:destination=test.vtt:format=webvtt" -f null -

ffmpegで、配信中のURLから直接whisperで文字起こしを行ってみます。テスト用コンテンツとして当社の社長あいさつ動画を利用してみることにします。長さなどもちょうどテスト向きですしね。なおlibvirtは16CPUにしてるんですが、フル稼働しても0.165倍という強烈な遅さでした。まあGPUがないサーバでのテスト稼働なので分かっていた話ではありましたが。

結果

test.vtt
������めん��めん��めん��年��けましておめでとうございます��年は��変お世話になりました。��ろしくお願いいたします��回はこちらの神社から��年のご挨拶をさせていただきます��て昨年022年も新型コロナウイルス��すが不安要因となっており��断を許さない状況でしたが��常生活においては対策を取りながら��限のない暮らしも��りつつありました��ッカーワールドカップでの日本代表の��覚ましい活躍など元気づけられるようなニュースも多く��社としては��ベントやライブにおける��ンライン化��らなる加速に伴い��たな取り組みを��日は��の取り組みを3つ紹介します��ずはバーチャルプロダクション��がいるこの場所��は��の通り神社ではなく��ーチャル空間を作り出す��先端のXRスタジオなんです��のRスタジオでは3DCG��地を使った立体的な合成が可能です��たここは罰��のように��ケーションも自由自��由なカメラワー��彩な照明室により��がまるでそのバーチャル空間に��イクオリス��ャリティーな映像に仕上がります��うした��力ある映像技術は��ンターテイメント目的はもちろん��商品のプロモーション��画の発表など��ーポレートブランディングの手段として期待ですつ目は��年需要が増加している��ーチャル株主総会向けソリューションの紹介です��れまで��くの企業の重要なイベントに携わってきた実践��イブ配信に強い��社だからこそお答えできる��め細やかなサポート力を強みとして��滑な株主総額��全の体制でサポートつ目に��たな技術開発へのチャレンジとして��年取得した特許を��紹介しますIによる動画監視装置の特許��れまではテレビ番組��組をインターネット上で配信する際��告の権利処理に必要な事前チェック��の目で24時間30065日行う必要がありました��こで監視カメラの��体検出技術を応用して��動で映像を監視する仕組みを��計しました��社はこのような新たなチャレンジに��後もより一層力を入れてまいります��めん023年もストリームはもっと素敵な伝え方を��社1��間となって皆様のお役に立てるサービス��開を進めてまいります��うぞよろしくお願いいたします��めん��めん��めん��めん

こんな感じの出力でした。バイナリで出てきてしまっているのでもう一歩な感じですね。一応公式のサンプルを踏襲してやっているんですが。とりあえず今回はここまでで、引き続き色々やっていければと思います。


https://voice.stream.co.jp/

Discussion