misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.08k stars 1.38k forks source link

GenerateVideoThumbnail keeps ffmpeg running for a long time #9172

Open tamaina opened 2 years ago

tamaina commented 2 years ago

💡 Summary

GenerateVideoThumbnailでffmpegが長時間実行され続けている

2022-11-13 23-08-00 1

tmpを抜き出したメタデータはこんな感じ

2022-11-13 23-16-47 1

  1. まずはffmpegの実行にタイムアウトを設定した方が良さそう
  2. ファイルのメタデータからサムネイルを抜き出すとかクライアントサイドでサムネイルを生成するなどを検討する?

📌 Environment

Misskey version: 12.120.0-alpha.7-p1.1 Your OS (Server): Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1021-oracle aarch64)

acid-chicken commented 2 years ago

多分 NSFW 検知用のコードを流用できる

mei23 commented 2 years ago

GenerateVideoThumbnailではなくてNSFW検知の方の ffmpeg がかかってる可能性ってないかしら?

mei23 commented 2 years ago

何れにしても普通にtimeoutオプションはあったわ https://github.com/fluent-ffmpeg/node-fluent-ffmpeg#creating-an-ffmpeg-command

acid-chicken commented 2 years ago

GenerateVideoThumbnailではなくてNSFW検知の方の ffmpeg がかかってる可能性ってないかしら?

htop に渡されてるコマンド見る限り前者だと思う

前者では黒塗りサムネの防止でシークを挟んでるけど、FFmpeg 側にはこのシークをどれぐらい正確に取り扱えば良いかを伝える術がなく、もしかしたら処理を重くする一因になっているかもしれない 後者で使ってるような I-Frame 選択による手法だとそこは解決するかもしれないけど、どのみち元データの動画をもとに検証してみないとわからない (@tamaina ので再現する動画が欲しい)

tamaina commented 2 years ago

抜き出した動画を送った(ただの猫動画だけど誰のかすらわからないので個別チャットで)

acid-chicken commented 2 years ago

以下の環境で再現しなかった FFmpeg 固有バージョンのバグかも?

Ubuntu 20.04.4 LTS (GNU/Linux 5.13.0-1021-oracle aarch64) ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c)

acid-chicken commented 2 years ago

まぁ何にせよタイムアウトはあっていいと思う

tamaina commented 2 years ago

バージョン?

ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100