ARMなLinuxにおけるjoin_logo_scpの導入については別のページで紹介しているのですが、コメントにてエラーが出たという旨の報告を受けたのでやはりバージョンの不一致などによるエラーが考えられるのでひとまず当時私が使用したソースファイルをアップロードしておきます。
また後続の方が同じようなエラーにあたったときのためにコメントを改変させていただいたり、一部抜粋のような形で公開させていただく場合がございます。ご了承ください。
一応ですが、以下がJLSの導入についての説明記事になっています。以下の記事には私が躓いた場所やエラーが出た場所については書いています。
あらかじめ注意事項などをお断りしておきます。
あくまで私の環境でインストールできたものになるので、他の環境のUbuntuやRaspberry Pi OS 64bit版については実際にできるかは不明です。
また導入の記事でも触れてはいるのですが、私はOrange Pi3にもインストールしていますが、サポートがかなり貧弱なSBCでライブラリ関係が滅茶苦茶だったりaptで拾えるのもバグまみれと凄惨たる状況ですが導入から実行まで問題なく行えているので、基本的には頑張れば導入できることがほとんどかと思います。
またOrange Pi3は64bitのUbuntu Server bionicベースのArmbian bionicで動作を確認しているので64bit環境でも問題なく動作は行えるはずです。
ソースファイル
こちらは改変を加えていないソースファイルになります。一応ざっと見た感じ権利関係や改変を加えない二次配布については問題なかったはずですがもし問題があるものがあればお問い合わせいただければ削除いたします。
Google Drive
https://drive.google.com/file/d/1RXsKWQwS0njqR5VDPN4y3XMW8pkbtEzS/view?usp=share_link
パスワードなしzipファイルにしています。また、中身については以下のものが含まれています。バージョンについては触れませんが私の環境で導入できたバージョンになります。
- AviSynthPlus
- chapter_exe arm対応版
- JoinLogoScpTrialSetLinux
- delogo-AviSynthPlus-Linux
- fdk-aac
- FFmpeg
- l-smash
- L-SMASH-Works
必要に応じて使っていただければいいと思いますが、基本的にはJLSの本体の部分は更新や修正を作者様がしていただいているので最新のものを使うのがいいかと思います。作者様のGitHubにもARM環境にインストールをするドキュメントがありますが、私が執筆したものになるので、くれぐれもこの導入についてはGitHubで質問を作者様に行わないでください。このサイトか、私のGitHubに対して質問を行って下さい。JLS導入後のツール固有の不具合についてのみ作者様に質問を行うようにしてください。
以下、コメントで寄せられたエラーについてまとめておきます。私が導入時に躓いたことは導入のページに途中で紹介はできる限りしていますのでそちらを参照してください。もしコメントの引用に問題があれば早急に削除いたします。
症例1
コメントで寄せられたエラーになります。L-SMASH-Worksが導入の難所なのですが、この部分のninjaを実行した際に以下のようなエラーが出たとのことです。
[1/2] Compiling C object 'lsmashsource@sha/.._common_lwindex.c.o'.
FAILED: lsmashsource@sha/.._common_lwindex.c.o
gcc -Ilsmashsource@sha -I. -I.. -I/usr/local/include/avisynth -I/usr/local/include -fvisibility=hidden -fdiagnostics-color=always -DNDEBUG -pipe -Wall -Winvalid-pch -std=c99 -O3 -Wno-sign-compare -DXXH_INLINE_ALL -D_FILE_OFFSET_BITS=64 -mfpu=neon -fPIC -MD -MQ 'lsmashsource@sha/.._common_lwindex.c.o' -MF 'lsmashsource@sha/.._common_lwindex.c.o.d' -o 'lsmashsource@sha/.._common_lwindex.c.o' -c ../../common/lwindex.c
../../common/lwindex.c: In function ‘create_index’:
../../common/lwindex.c:2553:78: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
if( adhp->dv_in_avi == 1 && format_ctx->streams[ adhp->stream_index ]->nb_index_entries == 0 )
^~
../../common/lwindex.c:2601:58: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
temp = (AVIndexEntry *)av_realloc( stream->index_entries, allocated_size );
^~
../../common/lwindex.c:2617:27: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
stream->index_entries = temp;
^~
../../common/lwindex.c:2618:27: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries_allocated_size’
stream->index_entries_allocated_size = allocated_size;
^~
../../common/lwindex.c:2619:27: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
stream->nb_index_entries = i;
^~
../../common/lwindex.c:2625:58: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
temp = (AVIndexEntry *)av_realloc( stream->index_entries, allocated_size );
^~
../../common/lwindex.c:2642:27: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
stream->index_entries = temp;
^~
../../common/lwindex.c:2643:27: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries_allocated_size’
stream->index_entries_allocated_size = allocated_size;
^~
../../common/lwindex.c:2644:27: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
stream->nb_index_entries = i;
^~
../../common/lwindex.c:2650:34: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
av_freep( &stream->index_entries );
^~
../../common/lwindex.c:2651:23: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries_allocated_size’
stream->index_entries_allocated_size = 0;
^~
../../common/lwindex.c:2652:23: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
stream->nb_index_entries = 0;
^~
../../common/lwindex.c:2661:108: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
print_index( index, "\n", stream_index, AVMEDIA_TYPE_VIDEO, stream->nb_index_entries );
^~
../../common/lwindex.c:2663:43: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
for( int i = 0; i nb_index_entries; i++ )
^~
../../common/lwindex.c:2664:57: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
write_av_index_entry( index, &stream->index_entries[i] );
^~
../../common/lwindex.c:2665:28: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
else if( stream->nb_index_entries > 0 )
^~
../../common/lwindex.c:2667:72: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries_allocated_size’
vdhp->index_entries = (AVIndexEntry *)av_malloc( stream->index_entries_allocated_size );
^~
../../common/lwindex.c:2670:43: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
for( int i = 0; i nb_index_entries; i++ )
^~
../../common/lwindex.c:2672:47: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
AVIndexEntry *ie = &stream->index_entries[i];
^~
../../common/lwindex.c:2676:51: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
vdhp->index_entries_count = stream->nb_index_entries;
^~
../../common/lwindex.c:2682:108: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
print_index( index, "\n", stream_index, AVMEDIA_TYPE_AUDIO, stream->nb_index_entries );
^~
../../common/lwindex.c:2684:43: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
for( int i = 0; i nb_index_entries; i++ )
^~
../../common/lwindex.c:2685:57: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
write_av_index_entry( index, &stream->index_entries[i] );
^~
../../common/lwindex.c:2686:28: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
else if( stream->nb_index_entries > 0 )
^~
../../common/lwindex.c:2690:72: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries_allocated_size’
adhp->index_entries = (AVIndexEntry *)av_malloc( stream->index_entries_allocated_size );
^~
../../common/lwindex.c:2693:43: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
for( int i = 0; i nb_index_entries; i++ )
^~
../../common/lwindex.c:2695:47: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
AVIndexEntry *ie = &stream->index_entries[i];
^~
../../common/lwindex.c:2699:51: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
adhp->index_entries_count = stream->nb_index_entries;
^~
../../common/lwindex.c: In function ‘lwlibav_import_av_index_entry’:
../../common/lwindex.c:3457:24: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
av_free( stream->index_entries );
^~
../../common/lwindex.c:3458:15: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries’
stream->index_entries = dhp->index_entries;
^~
../../common/lwindex.c:3459:15: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘nb_index_entries’
stream->nb_index_entries = dhp->index_entries_count;
^~
../../common/lwindex.c:3460:15: error: ‘AVStream’ {aka ‘struct AVStream’} has no member named ‘index_entries_allocated_size’
stream->index_entries_allocated_size = dhp->index_entries_count * sizeof(AVIndexEntry);
^~
ninja: build stopped: subcommand failed.
AVStream関係のエラーみたいですが、調べてみるとライブラリ関係のエラーみたいです。解決策がわかれば追記します。
追記:やはりライブラリの関係だったのか、私が導入できたソースファイル群なら解決できたとのことです。このエラーが出たらここで掲載しているソースファイルを用いてビルドしてみてください。
今でも同じようなエラーが出るようですが、ffmpegのバージョンが合っていない(新しすぎる)とのコメントをいただきました。参考にしてみてください。
対応ありがとうございます。
いただいたソースを利用して、
l-smash AviSynthPlus ffmpeg を再インストールしなおしたら、
L-SMASH-Worksのninjaが通りました。
ffmpegで何かが足りないのかとおもっていたのですが、
差分まではしらべることができていなかったので、
これでとりあえずは対応はすることができることとなりました。
3つの連携のどこに問題があったかのかとみてみたいと思いますが、
とりあえずご報告させていただきます
すいません、記事を作ってコメントを返信していたのですが、この間に解決できたようですね。一応私なりの考えを返信で記しましたのでよろしければ参照してください。
また、報告のほどありがとうございました。また躓いたらときは、書き込んでいただければわかる範囲で協力させていただきます。
最新の状況(raspi3 bullseye 64bit)でも同じエラーが発生
かつ上げていただいてるソースでもうまく行かなかったのですが
↓のサイトを参考にしたところ上手くいきました。
ttps://kt-hiro.hatenablog.com/entry/2022/05/15/150917
一応
・ffmpegで--arch=aarch64を追加
・tobitti0/chapter_exeのコピペとmeson.build、video_output.cppの書き換え
・nodejsのVerUp
・delogo-AviSynthPlus-LinuxのMakefile書き換え(手元でやった際は/usr/local/lib/aarch64-linux-gnu/avisynthにインストールされていたため)
(・+こちらのサイトの手順を本記事のエラーが発生するまで)
を行いました。
上記サイトの手順を基本的に踏んでいたので単純比較は出来ないですが
比べた感じだとmesonのVerが最新だとだめか、L-SMASH-Worksを
最新ではないものを使えばとりあえず行けるかもです。
コメント&報告ありがとうございます。
ここで紹介しているものもそうですが、元のコードも含めてバージョンが食い違うと動かないことが多々あるので、おそらくはL-SMASH-Worksのバージョンの問題の可能性が高いです。
mesonはおそらくは特定のバージョン以上であれば問題ないはずですが、何か問題となる部分があるのかもしれません、
確認は時間がかかるのと再現できるか怪しいので私側ではしませんが、PERL様コメントが誰かの役に立つことを祈ります。
私も同じ事象が発生しました。
https://forum.opencv.org/t/error-avstream-aka-struct-avstream-has-no-member-named-codec/3506
上記ページによると、ffmpeg が新しすぎるのが原因のようです。
ffmpeg のビルド時、git clone の後、git checkout release/4.4 としてからビルドすると、L-SMASH-Works のビルドもできました。
コメントありがとうございます。
ffmpeg側の問題なのですね。大変助かります。
使うツールが多いと構築だけで躓きますね…