くだすれDelphi(超初心者用)その60【Embarcadero】

2023/11/23(木) 20:02:10.21ID:KAoTyDwD
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

Delphi使いが優しくコメントを返しますが、お礼はDelphiの布教と初心者の救済をお願いします。

■ Delphi 12
http://www.embarcadero.com/jp/products/delphi
■ Delphi Community Edition (無料)
iOS、Android、Windows、macOS 向けアプリも開発可能。年間売上5000 US$以内の商用開発可。
https://www.embarcadero.com/jp/products/delphi/starter
<前スレ>
くだすれDelphi(超初心者用)その59【Embarcadero】
https://mevius.5ch.net/test/read.cgi/tech/1632449787/
■ 便所の落書きレベルの個人的な悪口やきつい言葉(氏ねとか)は禁止だからな。
■ Embarcaderoヲッチャ的な内容も歓迎だ。
■ 誰も立てないから立てた。さあ語れ。
318デフォルトの名無しさん
垢版 |
2025/03/29(土) 03:33:18.66ID:2z+oYoNe
>>316
すまん。間違えたよ。
319デフォルトの名無しさん
垢版 |
2025/03/29(土) 03:37:30.03ID:2z+oYoNe
>>317
やはり、字幕ファイルを同時にダウンする事ですか。
変な日本語。埋め込むと言う表現は間違ってると思うよ。
2025/03/29(土) 03:46:53.03ID:RbD9LPDj
そもそもDelphi関係ないよなーと思いつつ
まあ雑談ってことで

>>319
そうじゃなくて、動画データとは別にメタデータとして動画ファイルに字幕データを書き込むってことよ(たぶん)
動画ファイルと字幕ファイル別々って意味じゃないと思うぞ
>>317が言っているのはTVのように動画そのものに字幕を付けるわけじゃないってだけ
字幕については俺も詳しくはないけど保存しようとしているファイルタイプによっては字幕データを書き込めない場合もあると思う
321デフォルトの名無しさん
垢版 |
2025/03/29(土) 12:35:19.43ID:2z+oYoNe
>>320
オレも最初そのように解釈してたよ。
だからハマった。
字幕埋め込みやると動画と字幕ファイルをダウンロードするからね。動画に字幕を書き込むものでなかった。
で、いろいろ調べてるうちにFFmpegで動画に焼きつけるHPがあったんや。しかし、1時間の動画ならほぼほぼ1時間かかるんや。PCの性能かもしれんが。
こりゃダメだと思うと同時に埋め込みと焼き付けては違うのか?と思ったわけよ。
2025/03/29(土) 15:14:10.57ID:kb48Xezq
>>321
そもそもそのyt-dlpもffmpegのラッパーみたいなもんよ
動画のあれこれはそっちに回してる
動画と字幕ファイルをダウンロードするってのも当然で、
(たぶん)ffmpegが直に字幕ファイルを取得できないから代わりにyt-dlpがダウンロードしてる
そんでffmpegに動画ファイルと字幕ファイルを渡して「字幕が埋め込まれた動画ファイル」を生成するようになってるんだろうけどそこでコケてるってわけ(たぶん)
再生と同じだけ時間がかかるってことはエンコードもやり直しているんだろうけど、指定パラメーター間違ってるんじゃない?
すでにダウンロードしてあるならffmpegのスレかサイト探せばいいんじゃない
323デフォルトの名無しさん
垢版 |
2025/03/30(日) 20:18:04.67ID:NoPSGqgB
>>322
面倒くさくからも言うと
何もわかってないね。
2025/03/31(月) 00:15:07.41ID:kkxNZAfA
そもそもここはDelphiのスレ
yt-dlpはPythonスレかyt-dlpのスレへどうぞ
325デフォルトの名無しさん
垢版 |
2025/04/01(火) 19:46:48.11ID:lomSbMtE
>>324
アホだね。
326デフォルトの名無しさん
垢版 |
2025/04/08(火) 20:15:47.62ID:CBdThpCZ
プログラムを組むのには色々な知識や他分野のアイデアや失敗談が参考になるのに薄っぺらい人間は「ここはdelphiのスレだ」だと批判する。
結果どうだ、さびれるだけだろ。
327デフォルトの名無しさん
垢版 |
2025/04/08(火) 20:23:14.97ID:CBdThpCZ
>>324
何でお前が仕切ってんだ。
説明しろや。
328デフォルトの名無しさん
垢版 |
2025/04/08(火) 22:20:17.81ID:bTFTROml
元々廃れてるのに何言ってんだ??
2025/04/09(水) 01:06:25.77ID:KjXCof2z
てかやっぱyt-dlpの話は
ここじゃ良い答えを得られんだろ
2025/04/09(水) 02:21:36.23ID:XIvlryTT
>>325-328
お前のようなキチガイが我が物顔でスレを荒らすから廃れるんやでw
331デフォルトの名無しさん
垢版 |
2025/04/09(水) 03:59:34.98ID:Hm7DsvDe
delphiでyt-dlp使ってプログラムを組むのはダメでプロジェクトファイルや無料版の使用条件の話はいいのか?
ここはプログラム板だろうが。
視野が狭いのなお前ら。
332デフォルトの名無しさん
垢版 |
2025/04/09(水) 04:09:07.49ID:Hm7DsvDe
>>329
yt-dlpに限定した質問でなく「埋め込む」と言う意味についての質問だろう。
プログラム組んでたら埋め込むと言う案件に出会わないできただけだろう。お前ら。で、ffmpegでは焼き付けると言ってる人がいる。どう違うんだと言う事だ。
333デフォルトの名無しさん
垢版 |
2025/04/09(水) 04:10:56.46ID:Hm7DsvDe
>>330
お前がスレ汚しだ。
334デフォルトの名無しさん
垢版 |
2025/04/10(木) 11:19:31.33ID:sl4+KigV
yt-dlpがDelphiで描かれてる
ffmpegがDelphiで描かれてる
browserがDelphiで描かれてる
どれにも該当しない
335デフォルトの名無しさん
垢版 |
2025/04/10(木) 11:54:12.92ID:RuypOZeh
>>334
Delphiに関係ない投降するな。
2025/04/10(木) 17:39:27.40ID:UsbiRq0X
投降
337デフォルトの名無しさん
垢版 |
2025/04/10(木) 19:54:16.81ID:RuypOZeh
>>335
揚げ足取りはDelphiに関係ありません。
どっかに行けやアホ。
2025/04/10(木) 21:51:58.46ID:AsM8kPVG
正しい漢字を使いましょう
339デフォルトの名無しさん
垢版 |
2025/04/11(金) 03:15:05.84ID:+AqPCN1Z
>>338
delphiに関係ないわ
2025/04/11(金) 14:30:51.10ID:/8vt7NNX
>>339
delphiに興味ないわ
2025/04/11(金) 15:57:44.71ID:9wDK2WuU
>>340
立ち去れ
342デフォルトの名無しさん
垢版 |
2025/04/11(金) 19:31:41.04ID:+AqPCN1Z
>>341
お前バカだろ
343デフォルトの名無しさん
垢版 |
2025/04/11(金) 20:07:50.24ID:i2PY9ZNn
社畜幽霊ちゃん
344デフォルトの名無しさん
垢版 |
2025/04/11(金) 20:14:47.57ID:+AqPCN1Z
ここは、俺が仕切ってる。
Delphiのプログラミング以外の投稿は、俺以外許さん。文句ある奴はどっかへ行け。
2025/04/13(日) 01:52:07.57ID:JUDsBOqc
>>331
delphiでyt-dlp使ってプログラムを組むってどういうことですか?
CreateProcessかShellExecuteでyt-dlp呼び出すぐらいの話じゃないんですか?
どっちにしろそれだとyt-dlpのコマンドラインの使い方の話ですよね?
やっぱりDelphi関係ないんじゃないですか?
それともPython実行環境をDelphiで作るプログラムに実装させるって意味なんですか?
delphiでyt-dlp使ってプログラムを組むってどういう意味なんですか?
教えてくださーい
346デフォルトの名無しさん
垢版 |
2025/04/13(日) 09:11:04.43ID:QAU2zcJe
>>345

プログラミングで「字幕を埋め込む」の定義を教えてほしい。と質問している。yt-dlpやffmpegは具体例。

>313が質問だ。
>317の回答で>319で一応納得している。
>320がたぶんと言いながらひっくり返す。
以下、わけわからん奴が知ったかぶりしてお終いには
スレ違いだと言って逃げた。
347デフォルトの名無しさん
垢版 |
2025/04/13(日) 09:19:50.61ID:QAU2zcJe
>>345
delphiでyt-dlp使ってプログラムを組むってどういう意味なんですか?

CreateProcess
ShellExecute
CommandLineUni
など外部プログラムを「呼び出すぐらいの話」ですが
それくらいの話では問題ですか?
2025/04/13(日) 10:01:07.90ID:9+E6vnhP
DelphiというかObjectPASCALのコンパイル環境って円馬鹿以外にあるのか
2025/04/13(日) 11:37:22.04ID:0kGJxK1P
Lazarusがまだ開発続いてるよ
どれ位使われているかは分からん
350デフォルトの名無しさん
垢版 |
2025/04/14(月) 19:45:51.21ID:k68JyGLG
>>345
お前さ
俺がお前の質問に丁寧に回答してんのにお前は俺の質問は無視か?
人間が出来てないな。
2025/04/14(月) 19:56:11.50ID:Q1NpyqHR
「呼び出すぐらいの話」ならいいけど、どういうパラメーターを指定するかはスレ違いだ
352デフォルトの名無しさん
垢版 |
2025/04/14(月) 20:10:05.63ID:k68JyGLG
>>351
黙れアホ
2025/04/14(月) 20:36:13.20ID:Q1NpyqHR
呼び出し方ならこのスレでいい
それは言語特有の書き方があるからだ
けどパラメータに指定する文字列はどうすれば?みたいなのはスレチ
呼び出すプログラムによって違うのは当然なのでそのプログラムのスレで聞け
分かっているパラメータを指定してもその通りに動かないなら、呼び出し方の問題の可能性があるのでこのスレでいい
354デフォルトの名無しさん
垢版 |
2025/04/14(月) 22:31:37.05ID:k68JyGLG
>>353
誰もパラメーターの話なんかしてないだろ。
「埋め込む」と言うプログラミング世界での定義を聞いてるだけだ。
レベルが低くて仕方がないわ。
知ったかぶりはやめな。
355デフォルトの名無しさん
垢版 |
2025/04/14(月) 22:45:05.11ID:k68JyGLG
>>353
だいたい何を根拠で「ここでいい」とか言ってんだ。お前の定義なんかいらねぇんだよ。
2025/04/14(月) 22:47:29.87ID:N40FaRQ5
プログラミングにおける「埋め込む」には、次のような意味があります。
アプリケーションプログラムにSQL文や他のプログラムを埋め込むこと
コンピュータプログラムにバグ(欠陥)をわざと埋め込んでテストを行うこと(エラー埋め込み法やバグ埋め込み法)

Delphi 関係ないね
ダウソスレにいくといい
357デフォルトの名無しさん
垢版 |
2025/04/14(月) 23:00:56.85ID:k68JyGLG
>>356
黙れアホ。
お前の一生懸命調べた反論くらいとっくに知ってわ。
弱虫が駄々こねてねぇでママのところに行って言いつけてこいや。
2025/04/14(月) 23:32:11.70ID:Q1NpyqHR
> 「埋め込む」と言うプログラミング世界での定義を聞いてるだけだ。
なるほど!

Delphiスレでそんな言葉聞いたことないな
あるとしたらOLEぐらいか?
つまりスレチだ
359デフォルトの名無しさん
垢版 |
2025/04/14(月) 23:41:03.97ID:k68JyGLG
>>358
軽い投稿ばかりしないでな
delphi 埋め込むで検索しな。
お前の無知がわかるから。
2025/04/15(火) 00:07:20.87ID:dQ+QxF8U
検索して出てくるのは「プログラミング世界での定義」ではないけどなw
もちろんDelphiでの定義でもない

そもそも論点が違ってるんだよなぁ
「字幕を埋め込む」を知りたいはずだろうになんで「delphi 埋め込む」になるんだかw
そういう馬鹿な考えしているから求めている答えにいつまでたってもたどり着けない
fmpegかyt-dlp、字幕を埋め込む がキーワードなわけでdelphi関係ないんだがwww
2025/04/15(火) 11:48:45.89ID:CbsPdu2a
字幕スーパー
super impose
「superimpose」は「重ね合わせる」「上に置く」「合成する」という意味の動詞で、「スーパーインポーズ」と発音します。
362デフォルトの名無しさん
垢版 |
2025/04/15(火) 16:08:51.83ID:Yc+e0umG
>>360
ほんと、ガキだな。
ムキになってDelphiでの定義でないとか。
お前が仕切る事でないのな。お前の定義はいらないのな。わかる?
お前、いちいち全スレをそうやって評価してんのか?
恥かくだけだから、あらしはやめな。
2025/04/15(火) 17:04:00.52ID:aP7pFBXX
6レスでしかも連投までしてるほうがガキだしムキになっていると思います
364デフォルトの名無しさん
垢版 |
2025/04/15(火) 20:45:13.90ID:Yc+e0umG
>>363
悔しいならもっと大人になりな坊主。
2025/04/15(火) 21:18:59.74ID:Hj2lC2cB
最近盛況で楽しいね
これくらいDelphiも盛り上がればいいのにね
2025/04/15(火) 22:18:13.55ID:5NRpTm0N
Delphiばんざい!
2025/04/21(月) 14:42:57.48ID:Yit9TUrJ
1、スレッドが立つ。
2、技術のある人間がAAを提供して盛り上げる。
   感動を求めて人が集まってくる。
3、オリジナルAAを書ける人間が乗ってきてさらに盛り上げる。最盛期。
4、盛り上がりに乗じて何も書けない魯鈍と白痴が寄ってきてスポイルする。  ←いまここ
   彼らの無駄な愛着が逆効果を及ぼし、スレッドのレベルが著しく低下。
5、飽きて大勢が去っていき、行き場の無い魯鈍と白痴が残される。
   低レベルな自慢・偏見の陳列、煽りあい、無駄な罵倒、
   いわゆる「2ちゃんねる用語」を多用したお寒いレス等々が並ぶ。
6、煽りと罵倒しか出来ない魯鈍まで魯鈍同士の空疎な煽りあいに飽きて去る。
7、何も提供できない白痴が過去の栄光の日々を夢見て空ageを繰り返す。
   脳死状態
2025/04/21(月) 17:28:47.54ID:ONSY3bFx
該当スレが存在しアドレスアンカーがあって書き込めれば移動します。
作成はDelphiで組んでいます。
機能の一部でinput.MP4,mov,aviの動画を調べてShellExecuteでFFmpegを呼び出して処理させている。
(H.265であればH.264に変換させる等)
知りたいのは特にmp4のカラービットBit depth(ビット深度)の8/10/12 Bit判定がドコを参照すれば判るのか?
最終的にやりたいのは input.mp4 が 8bit以外であればH.264 8Bitに自動変換させたい。
同様の質問を「黒羽製作所 総合掲示板 真空波動研」スレに投下中でそちらにはアップルQuickTimeへのアドレス有りです。
ソフトウェア板(ffmpegスレ)にはどんぐりがどーたらで書き込めない。
369368
垢版 |
2025/04/21(月) 17:33:29.02ID:ONSY3bFx
真空波動研のDLLを使うのは?、は
DLLを動的リンクさせてinput.mp4のBit判定をリザルトで受け取れたら楽だろうけど
それはそれで仕様が公開されていないのでD6での使用方法が分らない
2025/04/21(月) 17:45:23.18ID:Cyno6pDc
>>369
コマンドラインバージョン使って、そのテキストを解析すればいいのでは?
2025/04/21(月) 18:28:24.04ID:KMmar/P6
「作成はDelphiで組んでいます。
機能の一部でinput.MP4,mov,aviの動画を調べてShellExecuteでFFmpegを呼び出して処理させている。
(H.265であればH.264に変換させる等)
知りたいのは特にmp4のカラービットBit depth(ビット深度)の8/10/12 Bit判定がドコを参照すれば判るのか?
最終的にやりたいのは input.mp4 が 8bit以外であればH.264 8Bitに自動変換させたい。」

この文章をそのままGrokに貼り付けたらサンプルコードを書いてくれる
2025/04/21(月) 18:29:29.40ID:KMmar/P6
MP4動画のビット深度(8bit/10bit/12bitなど)を判定するには、動画のコーデック情報やメタデータを解析する必要があります。DelphiでFFmpegを活用しているとのことなので、FFmpegのコマンドラインツールであるffprobeを使うのが最も効率的です。ffprobeは動画ファイルの詳細なメタデータを取得でき、ビット深度も確認可能です。
2025/04/21(月) 19:01:44.85ID:DImNR5cR
ここは、俺が仕切ってる。
Delphiのプログラミング以外の投稿は、俺以外許さん。文句ある奴はどっかへ行け。
374368
垢版 |
2025/04/21(月) 22:43:07.51ID:ONSY3bFx
レスありがとう
>370 372
ShellExecuteで外部プログラム結果をテキスト出力させて
それをDelphiのTMemoに読み込んで行を特定して抜き出すという感じ?
>371
スマホ超初心者で課金系はパスです。
375368
垢版 |
2025/04/21(月) 22:45:28.74ID:ONSY3bFx
>372
ffprobe の出力例一部抜粋
Stream #0:0[0x1](eng): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(pc, bt709), 5320x2280 [SAR 1:1 DAR 7:3], 120149 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)
Stream #0:0[0x1](eng): Video: hevc (Main) (hev1 / 0x31766568), yuvj420p(pc, bt709, progressive), 5320x2280 [SAR 1:1 DAR 7:3], 5440 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)
Stream #0:0[0x1](eng): Video: h264 (High 10) (avc1 / 0x31637661), yuv420p10le(pc, bt709, progressive), 5320x2280 [SAR 1:1 DAR 7:3], 31555 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)
Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709, progressive), 5320x2280 [SAR 1:1 DAR 7:3], 32117 kb/s, 59.94 fps, 59.94 tbr, 60k tbn (default)
上から10/8/10/8 Bit
'Main 10''High 10' 部分が色深度10Bitだろうか?
ffprobeのソース見てmp4部分を特定させる自信がないー
動画trakのメタデータ'xxxC'atom内っぽいなーとは思ってるのですが
詳細な資料にたどり着けてなくて
2025/04/21(月) 22:54:30.36ID:Cyno6pDc
>>374
それでもいいし、
パイプ作ってそれを渡す(ただしShellExecuteでは出来ないんでCreateProcess)
サブプロセスのstdoutにセットしてDelphiのほうでReadFileする、というのでもいい
2025/04/21(月) 23:27:31.71ID:KMmar/P6
>>374
いや、今はGrokはxユーザーなら誰でも無料で使える
Grokが書いたコードも直接ここに貼り付けてやろうと思ったが
長すぎて何度も書き込みに失敗したから諦めた
とにかくxアカウント作ってGrokに聞くといい、必ず力になってくれるはず
2025/04/22(火) 00:04:58.54ID:GyMhIb89
ffprobeで処理するなら出力形式をJSONにできる
379デフォルトの名無しさん
垢版 |
2025/04/22(火) 00:10:56.41ID:GyMhIb89
-hide_banner -print_format json -show_format -show_streams
380デフォルトの名無しさん
垢版 |
2025/04/22(火) 04:10:59.84ID:NQ8RJq1o
>>373
オレの真似するお前。
これはいいんだ。
お前は出てけ。
2025/04/22(火) 07:22:47.72ID:kJTRiSDQ
MP4ファイルのビット深度は、主に以下の情報を参照することで確認できます:
コーデック情報:H.265(HEVC)やH.264(AVC)の場合、ビット深度は動画ストリームのプロファイルやピクセルフォーマットに依存します。

ピクセルフォーマット(Pixel Format):yuv420p(8bit)、yuv420p10le(10bit)など、ピクセルフォーマットからビット深度を推定可能。

FFmpegのffprobeコマンド:ffprobeを使うと、動画のメタデータを詳細に取得でき、ビット深度(bits_per_raw_sample)やピクセルフォーマット(pix_fmt)を確認できます。

特に、ffprobeの出力から以下のフィールドを参照:
bits_per_raw_sample:ビット深度を直接示す(例: 8, 10, 12)。

pix_fmt:ピクセルフォーマット(例: yuv420pは8bit、yuv420p10leは10bit)。
2025/04/22(火) 07:24:53.28ID:kJTRiSDQ
ffprobeコマンドでMP4ファイルのビット深度を取得する例:
ffprobe -v error -show_entries stream=bits_per_raw_sample,pix_fmt -of json input.mp4


出力例(JSON形式):
{
"programs": [],
"streams": [
{
"bits_per_raw_sample": "8",
"pix_fmt": "yuv420p"
}
]
}

bits_per_raw_sampleが「8」であれば8bit、「10」であれば10bit。
pix_fmtがyuv420p10leやyuv422p10leなら10bit、yuv420p12leなら12bit。

注意:
一部の古いコーデックやファイルではbits_per_raw_sampleが空の場合があります。その場合はpix_fmtを参照して推定。
H.265では10bitが一般的ですが、H.264でも10bit(High 10 Profileなど)が存在するので注意。
383デフォルトの名無しさん
垢版 |
2025/04/22(火) 19:45:54.53ID:NQ8RJq1o
それDelphiのコードでないよね。
ここの、微妙なスレにこのタイミングで、空気読めない?
384デフォルトの名無しさん
垢版 |
2025/04/22(火) 19:46:48.52ID:NQ8RJq1o
それDelphiのコードでないよね。
ここの、微妙なスレにこのタイミングで、空気読めない?
385368
垢版 |
2025/04/23(水) 05:30:57.09ID:KmGEZqMw
D6でjsonコンポーネントが難儀なので構成はこんな感じでいきました
-hide_banner -v error -i input.mp4 -print_format json -show_streams > Output.json
以下かなり省略です 1レス最大32行と警告食らってしまったので

uses
Delimiter, // 外部関数OrderStr

function TForm1.FFprobeBitdepthPickUp(FullFileName: String) : Boolean;
var
(略)
begin
386368
垢版 |
2025/04/23(水) 05:32:04.61ID:KmGEZqMw
Cmd:='FFprobe 〜(略)' + CacheDir + '〜.json';
Memo.Lines.Add(Cmd);
Memo.Lines.Add('exit');
Memo.Lines.SaveToFile(SaveName); // CacheDir + '〜.bat'
ShellExecute(Handle,'open',PChar(SaveName),'',PChar(ExtractFilePath(Application.Exename)),SW_SHOWDEFAULT);
ListBox_Convert.Items.LoadFromFile(FileName); // CacheDir + '〜.json'
LineMax:=ListBox_Convert.Items.Count -1;
for Index:=0 to LineMax do
begin
Str:=ListBox_Convert.Items[Index];
ib:=Length(Str);
StrA:='';
for ia:=0 to ib do
begin
if ord(Str[ia]) <= $22 then Continue;
if ord(Str[ia]) <= $2C then Continue;
StrA:=StrA + Str[ia];
end;
StrB:=LowerCase(OrderStr(':',StrA,0));
if StrB = 'profile'then Profile:=LowerCase(OrderStr(':',StrA,1));
if StrB = 'codec_type' then CodecType:=LowerCase(OrderStr(':',StrA,1));
if CodecType = 'video' then Break;
end;
BitDepth := 0;
if Profile = 'main' then BitDepth:=8;
if Profile = 'main10' then BitDepth:=10;
if BitDepth <> 0 then Check:=True;
終了時にCacheDirごと一時ファイルをデリート
387368
垢版 |
2025/04/23(水) 05:44:03.69ID:KmGEZqMw
>>381 >382
ありがとう!
とりあえず映像深度の数字だけ欲しかったけど他も参照できる余地を残して
-show_streams 全部を出力させることにしました。
頭悪そうなコードになってしまいましたが
他にも動画情報取得に悩んでいる人にもと
388368
垢版 |
2025/04/23(水) 05:50:36.18ID:KmGEZqMw
リザルトをBooleanにしてるのは他の関係上です
2025/04/23(水) 07:18:29.06ID:o1ve4r3x
>>383-384
お前は仕様を理解せずコードだけ求める馬鹿か?

>>387
GJ !!
390368
垢版 |
2025/04/23(水) 19:47:10.02ID:KmGEZqMw
>386 訂正行 if ord(Str[ia]) = $2C then Continue;

デバックに動画を放り込んでると
'〜.json'ファイルが読み込めない(まだ出来上がってないから)と怒られるケースが出た。
さらに頭悪そうなコードを追加
ListBox_Convert.Items.LoadFromFileの1行を
以下に変更
for ia := 0 to 1000 do
begin
Application.ProcessMessages;
if FileExists(FileName) then // '〜.json'ファイルが存在するか?
begin
ListBox_Convert.Items.LoadFromFile(FileName);
Break;
end;
Sleep(100); // 待機
end;

プロセスの終了まで待機させないといけないからかーとこっちにしてみるも
参照 FDelphi Delphi Users' Forum [Q]CreateProcessのパラメータの使い方がヘルプを読んでもよく分かりません。
ht 〜アドレス貼れなかったので略〜
CreateProcess(Nil,PChar(SaveName),〜(略)
テキストでのバッチファイル実行はShellExecuteと同じ結果。
直接FFprobe実行を指定してみると実行できない?っぽいのだが
CreateProcess(Nil,PChar(Cmd),〜(略)
これは '>' 指定はあくまでバッチファイル用なのかな?と無しでやっても
パスは通ってても'〜.json'ファイルが作られないから進まないという結果に(謎)。
(バッチファイル実行ではFFprobeが無くてもパスが通ってなくて起動できなくても
 0バイト(空)の'〜.json'ファイルが出来るだけなので処理が通過する。)
う〜む
391デフォルトの名無しさん
垢版 |
2025/04/23(水) 19:54:36.08ID:tXAJNIU5
>>389
何言ってんだか
真が無い。
2025/04/23(水) 22:35:19.21ID:o1ve4r3x
>>390
頑張れ
>>391
真て何だ?
393デフォルトの名無しさん
垢版 |
2025/04/24(木) 20:18:54.11ID:KDw3CCba
>>389
で?
394デフォルトの名無しさん
垢版 |
2025/04/24(木) 20:20:42.55ID:KDw3CCba
>>392
アホなんだろうな。
2025/04/24(木) 22:10:01.76ID:ZEuKqFov
CreateProcessでProcessInfoのプロセスハンドルと
WaitForSingleObjectでプロセス終了するまで待機
2025/04/24(木) 22:21:13.58ID:ZEuKqFov
>のリダイレクトはコンソール用だから
CREATE_NEW_CONSOLEフラグ指定したらどうかな
あってるかしらんが
2025/04/25(金) 01:15:19.56ID:WCPLL/xz
プロセス終了待ちは解決しました。
ShellExecuteからCreateProcessに変更
詳細書こうとするとエラー
2025/04/25(金) 01:19:12.56ID:WCPLL/xz
>390 のタイトル先をベースに「プロセスの起動と終了を待つ mam-mam vcl_createprocess」検索先を使用。
「Delphi Programming Object Pascal mrxray」の 500_ 490_ 494_ 各検索先も参照。
RetValBool:=CreateProcess(Nil,PChar('Cmd.exe /C ' + SaveName),〜(略)
2025/04/25(金) 01:21:42.92ID:WCPLL/xz
とコマンドプロンプト起動の引数扱いのCmd.exe監視にしたら待機になりました。
※mam-mamアドレス参照コード内の
「起動待ちでエラー」表示処理部分を使うとエラー表示になって終了するのでごっそり削除。(謎)
2025/04/25(金) 01:23:48.92ID:WCPLL/xz
「黒羽製作所 総合掲示板 真空波動研」スレに管理人さんからレスがあり
H.264ならavcC
H.265ならhvcC
の中のSPSにある、bit_depth_luma_minus8
の部分がBit depth(色深度)と教えてもらいました。
プログラムの読み込みで'hvcC'atom位置までは自力でたどり着けているがそこから内容がイミフ

以下これまでの各参照。
https://
QuickTimeフォーマットの仕様書
→ developer.apple.com/documentation/quicktime-file-format
Video Sample Description 'avc1''hev1''hvc1'等の構造
→ engineering.dena.com/blog/2022/07/hevcplayerview/
 'hvcC'のdata部分は外部に飛ぶ
 → www.itu.int/rec/T-REC-H.265 → pdf
HEVC Video with Alpha Interoperability Profile (Preliminary)
→ developer.apple.com/av-foundation/HEVC-Video-with-Alpha-Interoperability-Profile.pdf
資料が難解で頭沸きそうdeath!
2025/04/25(金) 01:25:27.43ID:WCPLL/xz
以下新規の参照例
https://
ExMP4.Box.Hvcc
→ hexdocs.pm/ex_mp4/0.7.0/ExMP4.Box.Hvcc.html#summary
DelphiのIntegerは32bitで最大4バイトだけど↓2バイトなのか?
non_neg_integer(), ←ビッグエンディアンの?何バイトだろう?
'hvcC'のdata構造はコレで合ってるのかな?
@type t() :: %ExMP4.Box.Hvcc{
 bit_depth_chroma_minus8: non_neg_integer(),
 bit_depth_luma_minus8: non_neg_integer(), ←※この部分?
 chroma_format_idc: non_neg_integer(),
 constraint_indicator_flags: non_neg_integer(),
 level_idc: non_neg_integer(),
 nalu_length_size: non_neg_integer(),
 num_temporal_layers: non_neg_integer(),
 ppss: [binary()],
 profile_compatibility_flags: non_neg_integer(),
 profile_idc: non_neg_integer(),
 profile_space: non_neg_integer(),
 spss: [binary()],
 temporal_id_nested: non_neg_integer(),
 tier_flag: non_neg_integer(),
 vpss: [binary()]
}
バイナリの自己例(どーれーだー頭沸きそう)
bytes: Binary : Data field
4 : 00 00 00 7D : Size
4 : 68 76 63 43 : "hvcC" Atom
 01 02 20 00
 00 00 00 00 ←※2段目が無しという事はないハズなので4バイトじゃないよね
 00 00 00 00 B4 F0 00 FC 00 0F 03 A0 00 01 00 21 (略)
2025/04/25(金) 01:45:42.29ID:WCPLL/xz
>395 396 ありがとう
>397 は何度も書き込み試行で名前欄の文字が変わってしまった。
参照先に解説は無かったようなので試行錯誤してると
バッチファイルを直接起動させずにCreateProcessで
コマンドプロンプト起動の引数扱いで親Cmd.exe監視にしたら待機になりました。
FFprobe利用はセーフネット扱いなので400-401内容で詰まってます。
exeを小文字の実行ファイル名書くとサーバーエラーで蹴られるんですねココ
2025/04/25(金) 12:50:15.56ID:6ZF7QOEI
Delphi CE 11.3のライセンスキレたんで12.1入れたらメニューのプロジェクトクリックしただけで落ちる
しかたないのでVMでWindows11入れてDelphi12.1入れたら問題無かったのでそっちで使う事にするけどなんかもにょる
2025/04/25(金) 16:09:41.50ID:Yet6zdrW
.net関係か?
2025/04/28(月) 23:10:49.07ID:1qNUJnCM
(質問者は368です)
今の対象は"FFmpeg""FFprobe"なのでOSが64bit以外では処理を飛ばしてます。
>398 を応用しTMemoに
Memo.Lines.Add('where FFprobe > ' + CacheDir + 'WhereFFprobe.txt');
バッチファイルとして書き出して
コマンドラインで実行し
function TForm1.CmdExeExists(ExeName,TargetName: String) : Boolean;
RetValBool := CreateProcess(Nil,PChar('Cmd.exe /C ' + ExeName),略
生成されるテキストが0行かどうかで判断させてるのですが
関数化に汎用性を持たせようとすると
昔のXPではwhereコマンドが無いと警告を受けてしまいました。
どのOSから搭載されてるんでしょう?
ググり方「windows where command prompt 何時から 搭載」等が悪いのか
「コマンドプロンプトは昔からあります」みたいなのばっかりレスられてしまう。
次はOSバージョン調べて回避するコードいれないと・・・
2025/04/28(月) 23:13:17.83ID:1qNUJnCM
Windows の保護領域内でiniを作るとWin8以降ぐらいから
OSドライブ名:\Users\[ユーザー名]\AppData\Local\VirtualStore\Program Files [(x86)]\[実行アプリの階層構造〜]\〜.ini
に生成される訳でそれぞれに以下をすると
if FileExists(TargetFullPath) then Count := Count + 1;
自動的に割り振られてしまい実行場所に無くても自動移動先+直接指定で重複カウントされてしまう。
フォルダ個別に存在を調べるコードはありますか?
2025/04/28(月) 23:27:44.89ID:OAf+OdvF
>>405
生成するファイル名が分かっているのにwhereコマンド使う意味が分からない
ファイル検索ならFindFirst関数使えばいいだろうし

>>406
保護領域内でini作らなければいいのでは?
そもそもProgram Files [(x86)以下に設定用のファイルとかを保存するのが良くない
ユーザーフォルダやドキュメントフォルダを取得して明示的にそこに保存するべきだろう
408405 406
垢版 |
2025/04/29(火) 18:09:39.01ID:/fre+7qi
>>407
・質問1 実行ファイルがパス上に存在するか?の調べ方で
探すのは実行できる実行ファイルでWindowsでのパスが通っている所に存在するか?です。
プログラム組んでる自分には他のユーザーの使用環境は分かりません。
現時点で"FFmpeg""FFprobe"は64bitOS専用だからそれ以外はコマンド発行させてないので急いでません。
汎用性を求めるならということでFindFirst と FindNextということですよね?
[ delphi Windows パス取得 ]検索
ん〜 "where" 使う方が楽だなぁ(汗)
------
・質問2 iniファイルの存在と重複をWin10(D6)で調べる方法
>ユーザーフォルダやドキュメントフォルダを取得して明示的にそこに保存するべきだろう
あぁなるほど
最近のソフトがやけに「なんでこんな所に生えてんだ?」と思ってたらそういう回避方法なんですね。
実行場所が複数ある場合の同一iniへのアクセスを防ぐ一工夫がいりますが
そっちの方が楽そうですね。
------
[参照]
817_ディレクトリとファイルのリストとファイル検索
02_FindFirst と FindNext による方法 - Delphi 2009 以前用
http://
mrxray.on.coocan.jp/Delphi/plSamples/817_DirFileListTest.htm#02
2025/04/29(火) 20:33:29.79ID:LDFwfkd6
>>408
質問1について
PATHが通っていることが前提なら、その環境変数を取得して、あとはそのディレクトリに対して存在するか確認するだけじゃないかな
CreateProcessもファイル名だけを指定した場合環境変数に従って探索する
https://learn.microsoft.com/ja-jp/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa
LoadLIbraryなんかも同様の動作をするはずだし、たぶんwhereコマンドもほぼ同じだろうから、この探索順で同じようにFindFirstなり直接FileExistsで有無を確認すればいいのでは?
(ただしOSのバージョンによってこの順序が若干異なる)
ただ環境によるからって話なら、インストーラ使わずに(つまりパスを通さずに)使っている可能性もあるわけで
自分なら最初からファイル選択ダイアログ(またはフォルダ選択)使ってユーザに選択させるけど

質問2について
回避方法というよりWindowsはその方法を推奨している
プログラム(書き換え不可)とデータ(書き換え可)の分離
410デフォルトの名無しさん
垢版 |
2025/05/09(金) 00:30:36.94ID:mKYQcf6G
一周回ってDelphiもありかな?と思ったがいかんせん価格が高い
2025/05/09(金) 00:41:22.58ID:faN9fJ/K
そんなあなたにCommunity Edition
412デフォルトの名無しさん
垢版 |
2025/05/09(金) 15:05:40.34ID:nZMnhT9J
30周年なんだからもっと長期間割引してくれよ
2025/05/09(金) 16:34:36.53ID:kxBTusdH
v12のAIによるSmart CodeInsight機能ってCommunity Editionでも使えるの?

ここのレビューを見たけど、凄い機能だな
https://qiita.com/igy/items/ae428d294cc7fdf5e387
2025/05/09(金) 22:17:03.67ID:gva2Bjpn
Community Edition は12.1(これも本来は12.0だったのが特別に12.1)で記事では12.2で追加ってなってるからあと数年は先だね
2025/05/10(土) 02:25:10.80ID:X7zF2ttY
そうなのか…
微妙なところで有料版との差が付けられるんだなあ
2025/05/13(火) 16:47:36.24ID:hQgf38NW
割とAndroidのPlayStore条件に合わせて
CEが更新されてる気もするが。。。そうでもないか

前回はSDKの手動更新と
AndroidManifest.xmlの編集を強いられたっけ
417デフォルトの名無しさん
垢版 |
2025/05/14(水) 03:59:28.92ID:GEEECwO5
売れてないのに開発たいへんみたいだけど、会社だいじょうぶか?
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況