Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

modules版でエンコードを行おうとすると途中で止まる #20

Closed
perl2note opened this issue Jun 2, 2024 · 10 comments
Closed

Comments

@perl2note
Copy link

chapter_exe terminate called after throwing an instance of 'AvisynthError'

略

/home/XXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/src/output/chapter_jls.js:51
      for(let r of data.match(RegExp(strRegTrim,'g'))){

TypeError: data.match is not a function or its return value is not iterable
    at Interface.<anonymous> (/home/XXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/src/output/chapter_jls.js:51:25)
    at Interface.emit (node:events:517:28)
    at [_onLine] [as _onLine] (node:internal/readline/interface:423:12)
    at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:617:22)
    at ReadStream.ondata (node:internal/readline/interface:250:23)
    at ReadStream.emit (node:events:517:28)
    at addChunk (node:internal/streams/readable:368:12)
    at readableAddChunk (node:internal/streams/readable:341:9)
    at Readable.push (node:internal/streams/readable:278:10)
    at node:internal/fs/streams:277:14

Node.js v18.19.1

環境
orange pi5 plus
ubuntu-rockchip (Ubuntu 24.04 LTS)
ffmpeg-rockchip(6.0)
他メモ https://note.com/perl2note/n/n180020ce5967
使用コマンド
jlse -i "ファイル名" -e -t cutcm_logo -o " -c:v h264_rkmpp -vf pullup=jb=54 -preset veryfast -acodec aac -b:v 4M -aspect 16:9 -r 24000/1001 -ab 256K"

jlse --helpは通るところまで行けたのですがTSファイルを指定してエンコードを走らせたところ
lwiファイルの作成までは行くのですがそのあと上記エラーが発生しました。
自分でも調べて解決に至らず、可能でしたらお知恵を拝借させていただけないでしょうか。

@tobitti0
Copy link
Owner

tobitti0 commented Jun 2, 2024

join_logo_scp_trial/bin
の中に
chapter_exelogoframejoin_logo_scp
のバイナリは入っていますか?
4年も前ですが、利用された方がかいてくださった手順もあるので参考にしてみてください。
https://github.com/tobitti0/JoinLogoScpTrialSetLinux/blob/AddDocuments/Doc/install_on_ARM.md

貼っていただいたエラーの末尾は無音区間解析やロゴによるシーンチェンジ解析が終わった後に、それぞれの結果データを用いてチャプターファイルを生成するところでコケています。
result/ファイル名のところにobs_jlscp.txtobs_logoframe.txtobs_chapterexe.txtin_cutcm.avsが生成されていないと思います。(されていても中身が空)そのため無い情報を読み込んで処理しようとした為のエラーなはずです。(エラー処理が手抜きでわかりにくくてすみません)

今のエラー文でいちばん大事なところは、chapter_exe terminate called after throwing an instance of 'AvisynthError'で、今省略されているところが肝だと思います。
この一文だけ見れば一番初めに動作しなければならないchapter_exeがきちんと作動していないように見えます。
join_logo_scp_trial/binの中で./chapter_exe -v ファイル名.ts -s 8 -e 4 -o test.txtを実行して正常に結果が出力されますでしょうか?

@perl2note
Copy link
Author

ありがとうございます、そちらのテキスト(というかその方のサイト)も参考にさせていただいてます。

Loading plugins.
Avisynth ERROR: unexpected character ""
(/home/XXXX/video/conversion/ファイル名.ts, line 1, column 1)
Avisynth ERROR: unexpected character ""
(/home/XXXX/video/conversion/ファイル名.ts, line 1, column 1)
Error: No Audio!

エラーの感じからするとAvisynthplusが上手く入れられてなさそうな気配ですね。。。
AviSynthPlus
L-SMASH-Works
join_logo_scp_trial
あたり入れ直し含め確認してみます。mm

@tobitti0
Copy link
Owner

tobitti0 commented Jun 2, 2024

すみません
chapter_exeの動作確認方法を間違えていました
おそらくresult/ファイル名/in_org.avs
があると思いますので、./chapter_exe -v フォルダパス/in_org.avs -s 8 -e 4 -o test.txt
を試してみてください

@perl2note
Copy link
Author

XXXXX@ubuntu:~/video/conversion$ jlse -i "ファイル名.ts" 
chapter_exe converting input clip to 16bit audio
chapter_exe Movie data
chapter_exe     Video Frames: 107574 [29.97fps]
chapter_exe     Video Format: 
chapter_exe     Audio Samples: 172283291 [48000Hz]

chapter_exe mute 1: 113 - 467フレーム

chapter_exe terminate called after throwing an instance of 'AvisynthError'

放送局はファイル名から検出できませんでした
ロゴファイルすべてを入力します
logoframe /home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/result/ファイル名/in_org.avs: 1440x1080, 30000/1001 fps, 107574 frames
YUV4MPEG2 W1440 H1080 F30000:1001 Ip A0:0 C420mpeg2

logoframe Total logodata : 9
checking      0/107573 start.

logoframe checking    100/107573 ended.

略

logoframe checking 107573/107573 ended.

create_done: /home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/result/ファイル名/in_cutcm.avs
create_done: /home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/result/ファイル名/in_cutcm_logo.avs
/home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/src/output/chapter_jls.js:51
      for(let r of data.match(RegExp(strRegTrim,'g'))){
                        ^

TypeError: data.match is not a function or its return value is not iterable
    at Interface.<anonymous> (/home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/src/output/chapter_jls.js:51:25)
    at Interface.emit (node:events:517:28)
    at [_onLine] [as _onLine] (node:internal/readline/interface:423:12)
    at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:617:22)
    at ReadStream.ondata (node:internal/readline/interface:250:23)
    at ReadStream.emit (node:events:517:28)
    at addChunk (node:internal/streams/readable:368:12)
    at readableAddChunk (node:internal/streams/readable:341:9)
    at Readable.push (node:internal/streams/readable:278:10)
    at node:internal/fs/streams:277:14

Node.js v18.19.1
XXXXX@ubuntu:~/video/conversion$ cd ~/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/bin/
XXXXX@ubuntu:~/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/bin$ ./chapter_exe -v /home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/result/ファイル名/in_org.avs -s 8 -e 4 -o test.txt
chapter.auf pre loading program.
usage:
        chapter_exe.exe -v input_avs -o output_txt
params:
        -v 入力画像ファイル
        -a 入力音声ファイル(省略時は動画と同じファイル)
        -m 無音判定閾値(1〜2^15)
        -s 最低無音フレーム数
        -b 無音シーン検索間隔数
        -e 無音前後検索拡張フレーム数
Setting
        video: /home/XXXXX/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/result/ファイル名/in_org.avs
        audio: (within video source)
        out: test.txt
        mute: 50 seri: 8 bmute: 60 emute: 4
Loading plugins.
converting input clip to 16bit audio
Movie data
        Video Frames: 107574 [29.97fps]
        Video Format: 
        Audio Samples: 172283291 [48000Hz]
--------
Start searching...
mute 1: 113 - 467フレーム
         SCPos: 126 
terminate called after throwing an instance of 'AvisynthError'
Aborted (core dumped)
XXXXX@ubuntu:~/src/JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/bin$ 

前回略されていた箇所が肝とのことでしたのでこちら貼らせていただきました。
(カウントアップの箇所は相変わらず略しております。)
ご教示頂いたコマンドを試したところ下記のファイルとなっておりました。

CHAPTER01=00:00:03.770
CHAPTER01NAME=467フレーム  SCPos:127 125

ちなみにresultフォルダ内の構成は

in_cutcm.avs       in_org.avs          obs_cut.avs    obs_logo_erase.avs  obs_logoframe_1.txt     obs_param.txt
in_cutcm_logo.avs  obs_chapterexe.txt  obs_jlscp.txt  obs_logoframe.txt   obs_logoframe_list.ini

でobs_cut.avsのみ空で他は(正しい内容かは判断つきませんが)一応中身がある状態でした。

@tobitti0
Copy link
Owner

tobitti0 commented Jun 4, 2024

terminate called after throwing an instance of 'AvisynthError'
Aborted (core dumped)

なのでAvisynthで致命的なエラーが出ているようです。
本来はchapter_exeはもっと多くの無音区間を検出するはずです。
コアダンプファイルを生成して、gdbコマンドで調べてみてもらえませんか?

また、obs_logoframe.txtobs_logoframe_1.txtの中身はどうなっていますか?
ログだけ見るとlogoframeはちゃんと動いているように見えるのですが、cm区間の検出はchapter_exeの結果が必ず必要なので、うまく解析ができていません。

手元に環境があれば試せるのですが、orange piを保有していないので自身による調査が困難です…

@perl2note
Copy link
Author

すいません、まとまった時間が取れていないのとコアダンプファイルの生成方法がわからず手こずってました。
一応コアダンプファイル拾い上げられましたがgdbで必要なのはこちらであってますでしょうか。。。?

#0  __pthread_kill_implementation (threadid=281473197619968, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
#1  0x0000ffff95b37690 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#2  0x0000ffff95aecb3c in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x0000ffff95ad7e00 in __GI_abort () at ./stdlib/abort.c:79
#4  0x0000ffff95d5dd38 in __gnu_cxx::__verbose_terminate_handler () at ../../../../src/libstdc++-v3/libsupc++/vterminate.cc:95
#5  0x0000ffff95d59f8c in __cxxabiv1::__terminate (handler=<optimized out>) at ../../../../src/libstdc++-v3/libsupc++/eh_terminate.cc:48
#6  0x0000ffff95d50d3c in std::terminate () at ../../../../src/libstdc++-v3/libsupc++/eh_terminate.cc:58
#7  0x0000ffff95d5a324 in __cxxabiv1::__cxa_throw (obj=<optimized out>, tinfo=0xffff959b73d0, dest=0x0) at ../../../../src/libstdc++-v3/libsupc++/eh_throw.cc:98
#8  0x0000ffff955b9c5c in ThreadScriptEnvironment::VThrowError(char const*, std::__va_list) () from /usr/local/lib/libavisynth.so
#9  0x0000ffff955b9ac8 in ThreadScriptEnvironment::ThrowError(char const*, ...) () from /usr/local/lib/libavisynth.so
#10 0x0000ffff71c5c03c in lw_log_show () from /usr/local/lib/avisynth/liblsmashsource.so
#11 0x0000ffff71c57cb4 in lwlibav_audio_get_pcm_samples () from /usr/local/lib/avisynth/liblsmashsource.so
#12 0x0000ffff95582d38 in MTGuard::GetAudio(void*, long, long, IScriptEnvironment*) () from /usr/local/lib/libavisynth.so
#13 0x0000ffff955ead90 in Cache::GetAudio(void*, long, long, IScriptEnvironment*) () from /usr/local/lib/libavisynth.so
#14 0x0000ffff955ec56c in CacheGuard::GetAudio(void*, long, long, IScriptEnvironment*) () from /usr/local/lib/libavisynth.so
#15 0x0000ffff956c19d8 in AudioDub::GetAudio(void*, long, long, IScriptEnvironment*) () from /usr/local/lib/libavisynth.so
#16 0x0000ffff95480c28 in ConvertAudio::GetAudio(void*, long, long, IScriptEnvironment*) () from /usr/local/lib/libavisynth.so
#17 0x0000aaaaae1f41f8 in AvsSource::read_audio(int, short*) ()
#18 0x0000aaaaae1f20c8 in main ()

obs_logoframe.txt、obs_logoframe_1.txtは下記の通りでした。

obs_logoframe.txt
      127 S 0 ALL      126     127
  14435 E 0 ALL  14435  14435
  14481 S 0 ALL  14478  14481
  37558 E 0 ALL  37558  37558
  40256 S 0 ALL  40256  40256
  56649 E 0 ALL  56649  56649
  60250 S 0 ALL  60250  60265
  65640 E 0 ALL  65640  65640
  69237 S 0 ALL  69207  69237
  97198 E 0 ALL  97198  97198
 100346 S 0 ALL 100346 100379
 102533 E 0 ALL 102533 102533
obs_logoframe_1.txt
      127 S 0 ALL      126       127
  14435 E 0 ALL  14435   14435
  14481 S 0 ALL  14478   14481
  37558 E 0 ALL  37558   37558
  40256 S 0 ALL  40256   40256
  56649 E 0 ALL  56649   56649
  60250 S 0 ALL  60250   60265
  65640 E 0 ALL  65640   65640
  69237 S 0 ALL  69207   69237
  97198 E 0 ALL  97198   97198
 100346 S 0 ALL 100346 100379
 102533 E 0 ALL 102533 102533

それと、直接動かしたときは2行で終わってましたが、gdbのrunでchapter_exeを同じように走らせたところ
1000行以上出力されていて、実はメモリ不足で落ちてる…?みたいな疑惑もあり、
メモリ割当とかもちょっと確認してみようと思います。
(RasPiOSやArmbianみたくbootディレクトリにそれっぽいテキストファイルがなくて
 割当量変えるのどれだ、みたいな状況になり調べ中。。。)

@naa0yama
Copy link

naa0yama commented Jun 14, 2024

横から申し訳ありません。
最近環境を作り直していまして、下記エラーと同様のエラーにぶち当たりました。

terminate called after throwing an instance of 'AvisynthError'
Aborted (core dumped)

私の場合のエラーは特定することが出来ました。
原因としては L-SMASH-Works 側で音声系の変更がされたようで、私が使っている HomeOfAviSynthPlusEvolution/L-SMASH-Works では tag 付番されている物で動作出来たのは下記でした

1170.0.0.0 を利用して動作自体は問題なくなりましたのでご参考にまで共有いたします。

20220505   OK
20230716   OK
1156.0.0.0 OK
1170.0.0.0 OK    20240304    VapourSynth: added XYZ12LE
1183.0.0.0 NG    20240317    Fixed the index recreation when audio stream
1187.0.0.0 NG    20240402
1192.0.0.0 NG    20240407    LSMASHAudioSource/LWLibavAudioSource
1194.0.0.0 NG    20240408    LSMASHAudioSource

@tobitti0
Copy link
Owner

@naa0yama 情報ありがとうございます。
時間があるときに何が変わったか見てみたいと思います。
L-SMASH-Worksの変更に原因があるのであれば、 orangePiに限った現象ではなさそうですので、対応できそうなら対応も考えます。

@perl2note いちど1170.0.0.0で環境構築を試していただけますか?

@naa0yama
Copy link

反応ありがとうございます。
私の方でもかなり debug に苦戦しまして、環境毎の問題を極力排除してしたほうが良いかと思いますので極力最適化はせずに tobitti0 さんが公開している Dockerfile を Ubuntu:22.04 に対応させた物を用意してみました。
(24.04 は私の環境だともう少し調整が必要なため断念...

orange pi で動作を確認出来ないのが心苦しいですが、参考になれば幸いです。

確認方法

下記用途フォルダーを掘り、必要なデータを配置します

  • 録画データ(source)
    • CMカットしたい録画データ
  • ロゴデータ(logo)
    • Amatsukaze などで作ったロゴデータ
  • リザルト(result)
    • 処理結果のファイルが配置されます
mkdir -p $PWD/source
mkdir -p $PWD/logo
mkdir -p $PWD/result

Dockerfile の配置

ファイルが結構な分量になったため、 Gist で共有します。 Dockerfile を手元に配置します。

https://gist.github.com/naa0yama/00a7a0943bcc9269d4c4c73372e0b144

あとは docker build -t tmp-lsmash . とすれば build が始まると思います30分近くかかるのでゆっくりおまちください

完了後に下記コマンドで挙動を確認出来るかと思います

docker run --rm -it --user $(id -u):$(id -g) \
  -v $PWD/source:/source \
  -v $PWD/result:/join_logo_scp_trial/result \
  -v $PWD/logo:/join_logo_scp_trial/logo \
  tmp-lsmash '★<録画ファイル>★.ts'

また、実行時のコンソールログは下記のようになります。

$ docker run --rm -it --user $(id -u):$(id -g) \
  -v $PWD/source:/source \
  -v $PWD/result:/join_logo_scp_trial/result \
  -v $PWD/logo:/join_logo_scp_trial/logo \
    tmp-lsmash '/source/2024-06-08T012800 [テレ東] アイドルマスター シャイニーカラーズ 第10話 色とりどりのイメージ.ts'

> join_logo_scp_trial@1.0.0 start
> node src/jlse.js -i /source/2024-06-08T012800 [テレ東] アイドルマスター シャイニーカラーズ 第10話 色とりどりのイメージ.ts

AviSynth Creating lwi index file 0%
AviSynth Creating lwi index file 1%
AviSynth Creating lwi index file 2%
AviSynth Creating lwi index file 3%
AviSynth Creating lwi index file 4%

...(snip)...

AviSynth Creating lwi index file 98%
AviSynth Creating lwi index file 99%
AviSynth Creating lwi index file 100%


AviSynth Creating lwi index file 0%
AviSynth Creating lwi index file 1%
AviSynth Creating lwi index file 2%

...(snip)...

AviSynth Creating lwi index file 98%
AviSynth Creating lwi index file 99%
AviSynth Creating lwi index file 100%


chapter_exe converting input clip to 16bit audio
chapter_exe Movie data
chapter_exe     Video Frames: 54094 [29.97fps]
chapter_exe     Video Format: 
chapter_exe     Audio Samples: 86620560 [48000Hz]

chapter_exe mute 1: 134 - 39フレーム

chapter_exe mute 2: 2731 - 15フレーム

chapter_exe mute 3: 5391 - 48フレーム

...(snip)...

chapter_exe mute142: 53179 - 34フレーム

chapter_exe mute143: 53631 - 29フレーム

chapter_exe end

放送局はファイル名から検出できませんでした
ロゴファイルすべてを入力します
logoframe Creating lwi index file 0%
logoframe Creating lwi index file 1%

...(snip)...

logoframe Creating lwi index file 98%
logoframe Creating lwi index file 99%
logoframe Creating lwi index file 100%
logoframe 

logoframe Creating lwi index file 0%
logoframe Creating lwi index file 1%

...(snip)...

logoframe Creating lwi index file 98%
logoframe Creating lwi index file 99%
logoframe Creating lwi index file 100%
logoframe 

logoframe /join_logo_scp_trial/result/2024-06-08T012800 [テレ東] アイドルマスター シャイニーカラーズ 第10話 色とりどりのイメージ/in_org.avs: 1440x1080, 30000/1001 fps, 54094 frames
YUV4MPEG2 W1440 H1080 F30000:1001 Ip A0:0 C420mpeg2

logoframe Total logodata : 11
checking      0/54093 start.

logoframe checking    100/54093 ended.

logoframe checking   1000/54093 ended.

...(snip)...

logoframe checking  50000/54093 ended.

logoframe checking  54093/54093 ended.

create_done: /join_logo_scp_trial/result/2024-06-08T012800 [テレ東] アイドルマスター シャイニーカラーズ 第10話 色とりどりのイメージ/in_cutcm.avs
create_done: /join_logo_scp_trial/result/2024-06-08T012800 [テレ東] アイドルマスター シャイニーカラーズ 第10話 色とりどりのイメージ/in_cutcm_logo.avs

手元で生成されたファイルも一緒に添付してありますので参考まで

余談

私の方で確認している限りでは前述の通り、 L-SMASH-Works に変更が入り 1170.0.0.0 より上のバージョンでは動作を確認出来てません。
また、 FFmpeg 7.0 では build 自体が成立しないため解消するまでは FFmpeg 6.6.1 を使い続けるしかなさそうです。。 FFmpeg 7.0 では「CLIツールのマルチスレッド化」が行われたようなのでできれば FFmpeg 7.0 に対応出来ればと思ったのですが、どの箇所が悪いのかわからずです...

@perl2note
Copy link
Author

@tobitti0 @naa0yama
情報ありがとうございます。L-SMASH-Works1170.0.0.0にしてみたところ、
ひとまずh264でですがCMカット&mp4エンコードまで出来ました。
(RasPiで使っていたオプション群でエンコードのみh264_rkmppに差し替えてみたものでは
 エンコード時にエラーを吐いていたのですがソフトウェアエンコードでは通ってること、
 例として記載されているオプションと比較してだいぶ異なっていることから
 使ってたffmpegのオプションがrkmppに無いためと思われます。)

ありがとうございました、こちらCloseとさせていただきます。mm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants