2025年7月18日金曜日

ffmpeg(ver 7.1.1) 動画をカットしたら音声だけ抜け落ちた

最近古い動画ファイルの不要な部分をカットしようとしたところ音声がない動画ファイルになってしまうという症状に悩んでいました。

やってることは再エンコなしで

ffmpeg -to 00:15:00 -i FileName -c copy CutedFileName

といった感じで不要な末尾をカットしているだけなのですが…

動画ファイルの日付を見ると2022/10/05とか結構昔のファイルです。

ffprobeで元ファイルとカット後のファイルを比べてみると映像と音声のストリームは存在するものの、音声ストリームのDURATIONが00:00:00.000000000となってしまっている。

確かにファイルサイズも音声分サイズが小さくなっている感じにw

色々と検索して調べてみるものの、似たような現象はあるものの、そちらでは音声のみ切り出せるようなのですが、こちらでは切り出しは行えず、再エンコーディングすれば音声を取り出せるのみ。

少し現象が違うものの、原因はffmpegの過去のバグに起因するっぽい感じ。 

aacで再エンコするとかなり高音域の音が歪まくるのでflacを使用するという手もあるのですが、ファイルサイズがそれなりに大きくなってしまうので、割り切って作業を進めることもできず途方に暮れていました。最悪、ffmpegのソースに手を入れて、バグ回避させてビルドすることも考えたのですが、手元にgcc環境が無いので少し時間をおいてみることに。

そして今日、過去のffmpegのバイナリーを使って試してみようかと。

現状メインで使っているのはffmpeg 7.1.1ですが、公式のリンクから存在したのはオートビルドのバイナリが格納されているBtbNさんのところで、現時点で最古のものはAuto-Build 2023-08-31 12:54のもの。

試しにmasterではなく、バージョン4.4.4-6を試してみました。

結果としては、あっさりと音声付きの動画を作ることができました。

同様に、5.1.3-16, 6.0-34でも問題なく動画が作成されました。

これらのバージョンで作成された後のファイルは7.1.1でも正しく処理が通るようになりました。 

今度は逆にどこまでのバージョンがこのバグ回避が行えるか気になったので調べてみると、Auto-Build 2025-07-17 14:10の6.1.2-192でも問題なし。しかし7.1.1-56では音声が無くなる状況に。

version 7ベースで最古のものが Auto-Build 2024-04-30 12:51に含まれていた7.0-21を試したところ、こちらは音声が含まれ問題がなさそうでした。

結論として7.1以上では、どうもバグのあるファイルでは-acodec copyが機能しなくなるのでしょう。

公式でwindows版のビルドを公開しているhttps://www.gyan.dev/ffmpeg/builds/ではprevious release version: 7.0.2が残っているので試したところ問題はない様子。

問題がなければ、現状ffmpegは7.0.2を使うのが幸せなのかな?
  

2025年7月16日水曜日

地味に設定画面が画面からはみ出てるので…

obs-studioをビルドして確認するために実行する。

すると、メインで使っている画面で設定画面を開くと、設定のウィンドウが微妙に画面からはみ出しているという…

タスクバーを隠れるようにすればいいんだろうけど。というわけで、設定値を確認してみると、\obs-studio\frontend\forms\OBSBasicSettings.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>OBSBasicSettings</class>
 <widget class="QDialog" name="OBSBasicSettings">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>981</width>
    <height>730</height>
   </rect>
  </property>

現在使用中のモニターを見ると1920x1080で大丈夫そうですが、拡大/縮小で150%(推奨)というのが問題になってそうです…

まぁ何と言うか、とりあえずやっつけでデフォルト値を弄っておけばいいかな?

ザックリ考えると、古典的な考えで800x600とかでいいかとか。

まぁとりあず画面内に収まってるからこれで良しとしようw

一般的にはメインウィンドウが存在するデスクトップウィンドウのサイズを取得して、作業領域に収まるように表示させるのですが、あまり凝りすぎると付加処理が悪さをすることも。まぁその辺は気が向いたらコードを弄るのがよさげかな?
 

QSpinBox padding

グレー枠の原因はあきらめて、31.1からやたら大きくなってしまったSpinBoxの原因を探ってみました。

色々と見て行くとどうやらYami.obtというstylesheetフォーマットのファイル中にたどりつきました。

ただ実際にどのように反映されているのか良くわかっていなく、このファイルを反映するにはリビルドすることが必須となってしまっていてトライアンドエラー方式で確認するのは結構痛いかった。そのうちpowershellでfindstrを使ってソース検索したときに

obs-studio\build_x64\rundir\Release\data\obs-studio\themes\Yami.obt

obs-studio\frontend\data\themes\Yami.obt

と表示され、単純にコピーされているだけという事実に…。記憶でどこかにobs-studioを使い始めたときにスタイルシートがどこかに入っていた記憶があったのだが、ユーザーフォルダ内のAppData\Roamingの中を探してなかったのであきらめていたが、よく考えればインストールフォルダにあるのが当然なのですが。

コンパイルの必要が無くなり、ようやく細かな点を確認できるようになりました。 

31.1からスペーシングやパディングを変更したために悪影響が出ているのと、全体的に修正作業がやっつけっぽいので細かいところでいろいろとおかしくなっています。

ザックリと31.0.4のYami.obtの比較しても全体的に修正が加わっているためにパッと見ではよくわかりませんが、細かく見て行くとQSpinBoxはベースとなるQPlainTextEditとQSpinBoxに付随するup-button,down-buttonが組み合わさって構成されていました。(Qtのドキュメントを見た方が早いとは思う…が、) 

最初にQSpinBoxのpaddingの記述が違っているのでそこから様子を見ることに。

結論から言えば、QSpinBoxは内部のQPlainTextEditのpadding分と自身のpadding分が反映されるため、巨大化しているようです。極端な話、QSpinBoxのpaddingを 0px 0pxで指定すれば全体的にスッキリします。ただ、スピンのボタンが小さくなりすぎるので、UIデザイン的には反則気味にw

31.1の変更状態を考慮すると、marginは触らずにpaddingだけで行っている感じがするのと、QSpinBoxはやはり大きめにしたいのではないかと考え、

QSpinBox,
QDoubleSpinBox {
    background-color: var(--input_bg);
    border: 1px solid var(--input_bg);
    border-radius: var(--border_radius);
    padding: var(--input_padding) var(--input_text_padding);
    padding: var(--input_padding) 0px;
    height: var(--input_height);
    max-height: var(--input_height);
}

としてみました。左右の無駄なパディングを消した形です。31.0.4と比べ、height指定が増えていますが、これ、正直意味をなしていないようで…。

あとは気になるポイントとしてはスピンボタンの上下にある間の隙間。それとこれでも右側の隙間が無駄に存在している点も気にはなります。min-widthとか設定できたりするのかな?

試行錯誤中の状態がこちら 



何となく行けそうな雰囲気?

2025年7月15日火曜日

obs-studio githubからのビルド

このブログだとあまり明記していなかったので具体的なビルド手順を載せておこうかと。

必要な環境は、git, cmake, visual studio 2022ぐらいかな?現時点では全て誰でもダウンロード可能です。

ビルドに必要な空き容量NTFSで 6.26GB となっていました。

PowerShell 7.5.2
PS C:\Users\xxxxx> mkdir S:\obs\31.1.1\

Directory: S:\obs

Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 25/07/15 09:12 31.1.1

PS C:\Users\xxxxx> s:
PS S:\> cd \obs\31.1.1
PS S:\obs\31.1.1> git clone --recursive https://github.com/obsproject/obs-studio.git -b 31.1.1 --depth 1
Cloning into 'obs-studio'...
remote: Enumerating objects: 5326, done.
remote: Counting objects: 100% (5326/5326), done.
remote: Compressing objects: 100% (4434/4434), done.
remote: Total 5326 (delta 879), reused 3056 (delta 657), pack-reused 0 (from 0)
Receiving objects: 100% (5326/5326), 14.86 MiB | 14.24 MiB/s, done.
Resolving deltas: 100% (879/879), done.
warning: refs/tags/31.1.1 4b56b9b214967c6f0143e36f722c64c6d755d55f is not a commit!
Note: switching to 'a32b3f9f6d5e1cf6fa0f8105a2ed46ec0b4d991c'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

git switch -c <new-branch-name>

Or undo this operation with:

git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Updating files: 100% (5043/5043), done.
Submodule 'plugins/win-dshow/libdshowcapture' (https://github.com/obsproject/libdshowcapture.git) registered for path 'deps/libdshowcapture/src'
Submodule 'plugins/obs-browser' (https://github.com/obsproject/obs-browser.git) registered for path 'plugins/obs-browser'
Submodule 'plugins/obs-websocket' (https://github.com/obsproject/obs-websocket.git) registered for path 'plugins/obs-websocket'
Cloning into 'S:/obs/31.1.1/obs-studio/deps/libdshowcapture/src'...
remote: Enumerating objects: 1037, done.
remote: Counting objects: 100% (604/604), done.
remote: Compressing objects: 100% (96/96), done.
remote: Total 1037 (delta 537), reused 511 (delta 508), pack-reused 433 (from 2)
Receiving objects: 100% (1037/1037), 332.23 KiB | 10.07 MiB/s, done.
Resolving deltas: 100% (722/722), done.
Cloning into 'S:/obs/31.1.1/obs-studio/plugins/obs-browser'...
remote: Enumerating objects: 3799, done.
remote: Counting objects: 100% (1676/1676), done.
remote: Compressing objects: 100% (444/444), done.
remote: Total 3799 (delta 1376), reused 1258 (delta 1232), pack-reused 2123 (from 2)
Receiving objects: 100% (3799/3799), 1.09 MiB | 10.11 MiB/s, done.
Resolving deltas: 100% (2594/2594), done.
Cloning into 'S:/obs/31.1.1/obs-studio/plugins/obs-websocket'...
remote: Enumerating objects: 6189, done.
remote: Counting objects: 100% (823/823), done.
remote: Compressing objects: 100% (203/203), done.
remote: Total 6189 (delta 656), reused 631 (delta 618), pack-reused 5366 (from 4)
Receiving objects: 100% (6189/6189), 1.75 MiB | 10.62 MiB/s, done.
Resolving deltas: 100% (4258/4258), done.
Submodule path 'deps/libdshowcapture/src': checked out '8878638324393815512f802640b0d5ce940161f1'
Submodule 'external/capture-device-support' (https://github.com/elgatosf/capture-device-support) registered for path 'deps/libdshowcapture/src/external/capture-device-support'
Cloning into 'S:/obs/31.1.1/obs-studio/deps/libdshowcapture/src/external/capture-device-support'...
remote: Enumerating objects: 60, done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 60 (delta 30), reused 41 (delta 19), pack-reused 0 (from 0)
Receiving objects: 100% (60/60), 34.39 KiB | 5.73 MiB/s, done.
Resolving deltas: 100% (30/30), done.
Submodule path 'deps/libdshowcapture/src/external/capture-device-support': checked out 'fe9630974d47f51bf54826e72fb8b654e620aa93'
Submodule path 'plugins/obs-browser': checked out 'bdabf8300ecefeb566b81f4a7ff75f8a8e21f62b'
Submodule path 'plugins/obs-websocket': checked out '40d26dbf4d29137bf88cd393a3031adb04d68bba'
PS S:\obs\31.1.1> cmake-gui
PS S:\obs\31.1.1>

cmake-guiが起動した後は、上の方から設定します。

Configureを押し、ビルドするフォルダの作成の確認をした後、終了するまでしばらく待ちます。完了したらGenerateを押し、またしばらく待ちます。終わったらOpen Projectを押すとVisual Studio2022が起動します。


実際にビルドするには必要かどうかわかりませんが、ソリューションの構成をReleaseにしてデバッグなしで開始(Ctrl+F5)を押すと実行ファイルの作成が始まります。この状態で放置して、しばらくすると(手元のネットブックだと35分ほど)obs-studioが実行された状態になります。

一回ビルドを通しておけば、ソースの修正などを行う時に型チェックなどがまともになるので時間があるのであれば一度ビルドしておくことをお勧めします。

失敗するパターンとしてはファイルシステムがWindowsではNTFSでないとcmakeでエラーが出て進まなくなりました。 

2025年7月13日日曜日

はやくも 31.1.1

昨日ビルドしたそばからgithubでは31.1.1がタグ付けされていました。

機械的に作業しているのか現状コンパイルは通っていますが、VisualStudio内のリンクが結構ぐちゃってる感じがします。まだまだアップデートが続きそうな気配。 

31.1から変更となったUI上のパディングの変更によりスピンエディットボックス(Qtだと何て呼ぶんだろうか?w)が巨大化してるので何とかしたいと思っているのですが、どうしたものか… 

2025年7月12日土曜日

31.1.0が4日前にリリースされてたっぽいですね

31.0と31.1はソースの配置位置が変わっていたりファイル名が変わっていたりと、内部的には大きく手が入っている印象がありました。

ドキュメントを見ると結構ダイアログの修正や内部的なバグの修正など行われているみたいです。

UIの見た目で嬉しいのは、コントロールの大きさがデザイン系から独立して変更できる点でしょうか?全体的にコンパクト収まるので、クラッシックを使用していましたが、今後はもう少し選べる選択肢が増える感じ。

手を加えた状態はこんな感じに

時分秒のエディットボックスが大きくなってる気がします…世間的には出力タイマーのウィンドウは大きくしたいのだろうか?

そして相変わらずプレビューのグレー枠の原因が分からない…orz 

2025年7月9日水曜日

Qt デフォルトのウィンドウのサイズ

細かいことはわかりませんが、いつも使っている出力タイマーウィンドウ

開いてから使っているうちに小さくしています。

デザイナーでサイズ調節しておいてもいいのかな?とも思ったものの、どうせ自動で最小サイズがセットされるのであれば、デフォルトサイズを小さめにしておけばいいんじゃね?ということで早速試してみました。

obs-studio\UI\frontend-plugins\frontend-tools\forms\output-timer.ui

:
:
 <widget class="QDialog" name="OutputTimer">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>0</width>
    <height>0</height>
   </rect>
  </property>
:

最初は少し小さめにして試しましたが、どうせなら0にしてしまえということでこんな感じに

もともとの数値はwidth, heightそれぞれ697,240だったりしますが、そもそもこの数値の単位は何?とかあったりしますw

今回はこんなところでしょうか。小さくなりすぎな気もしますが、結局毎回ウィンドウのサイズを縮めて使っているので、その手間が一つなくなるだけでもいいことなのかな? 

2025年7月7日月曜日

PV詐欺

このすばの「PV詐欺」という発言から知った言葉ですが、まさにこれタコピーの原罪。

abemaで流されていた軽めのPVのイメージで気軽に見始めたところ、結構ヘビーな鬱展開w

見始めた最初はドラえもん見たいなものかな?とかタコピーの現実のギャップが開きすぎててあれな感じとか違和感が強いものの、すべてを吹き飛ばす鬱展開w

寝る前に見てしまったのも敗因だった… 

個人的に一番きつかったのはボロボロになったしずかちゃんがチャッピーの首輪だけ持ってタコピーの前に現れたシーンかな…。

2話目が流された後も軽めのPV…まとめられてたけど、海外でも結構阿鼻叫喚なコメントが多いらしいがw 

VisualStudio内の比較

VisualStudio2022でファイル比較(Diff)が使えるようになっていたのでソースファイルの手直しがかなり楽になってはいました。

ですが、操作の起点がソリューションエクスプローラー限定っぽく、どうやってもメニューに「比較やコンペア」と言った文字が出てきてくれません。 

唯一、ツールバーに「ファイルを比較」とかあったので『もしや!?』と期待して表示させてみましたが、どうもファイル比較状態のエディットウィンドウになっていないと使えない模様。残念。

 

途方に暮れこれまでも何度もネット検索で見てきましたが、もう少し地道に調べることに。

AIが嘘説明が多すぎて正直邪魔でしかありません。

 

調べてみると、2022 17.7からファイル比較ができるようになっているようで、

Microsoft、「Visual Studio 2022 17.7」に2つのファイルの中身を比較する機能を追加 https://codezine.jp/article/detail/18213

現状の17.14.7でも利用できそうなのですが、上記記事のような「Ctrlを押しながら2つのファイルを選択した状態で…」という形にしもどこのポップアップメニューにも比較できそうなメニュー項目は追加されず、

2つのファイルの内容を比較して差分を表示する https://www.javadrive.jp/vscode/editor/index3.html

で書かれているコマンドパレットなるものは表示される気配もなく…メニューもない。コマンドウィンドウというものがあったが、「比較」や「Compare」と入力してみても無駄でした。

そして行き着いた先が

「Visual Studio」にようやく差分表示(Diff)が実装へ? ~叩き台となる拡張機能が公開 https://forest.watch.impress.co.jp/docs/news/1445493.html 

おそらく現状の2022 17.14.7ではこのプラグインが取り込まれた形となっているようですが、ファイル比較の起点がただのファイル編集状態では機能しないのでこの記事にあるプラグインを使うことにしました。

ただ、プラグインってどうやってインストールするんだか知りませんw

そもそもマーケットプレイスとかあるし、なんだかオープンな様でオープンでない言葉を見るとやる気が失せるわけですが。

File Differ https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileDiffer

こちらより直接ダウンロードはできました。

なんかよくわからん拡張子だけどそのまま実行すると、インストーラっぽい感じでインストールが終わりました。

あとからVisualStudio内のメインメニューの

拡張機能(X) / 拡張機能の管理(M)

を選択すると 

こんな画面が出てきてFile Diffと入力すればそのままいい感じで取り込んでくれそうな感じになっていました。

すでに正しくインストールが終わっているようで 

こんな感じでインストール状態になっていました。

プラグイン状態のおかげで、一つのファイルが開かれた状態からポップアップメニューにCompareの文字が表示され、無事ファイル比較ができるようになりました。


 

やはり余計なプラグインが入っていたのが原因だった

先日の出力タイマーの時間が保持されないと言った原因はリネームしたプラグインが原因でした。

しかも2つ…プラグインフォルダのファイルを取り除いて起動するとスッキリしました。

 

やはりこちらはプレビューの枠が無い状態。ウィンドウの大きさを変えても出てこないのでどこかの設定が違うだけなのか? 

2025年7月5日土曜日

プラグインフォルダ

プレビューのグレー枠が気にはなっていますが、それ以外にも少し気になる点が。

こちらは手を加えた出力タイマーですが、時間設定の変更をしてobs-studioを再起動するとどうも時間が変更する前の状態に戻っているという謎現象。

ソースを追うと時間設定値を開始時にはファイルからリストアされて、終了時にはファイルに保存されている部分がありました。具体的には

C:\Users\[ユーザー名]\AppData\Roaming\obs-studio\basic\scenes\[シーン名].json

内のoutput-timerに保存されています。更新状況を見ると毎回終了時に書き出されているのが確認できました。

コンパイル環境では出力タイマーの時間設定値は更新されていて、実際に使用している環境だと時間設定値が変わらないという状況で、原因がよくわからないので一旦obs-studioのファイルの整合性チェックを行って更新して見ましたが、変化がなかったので、再インストールすることに。31.0.4のインストーラが公開されていたのでこれで試してみます。

設定ファイルは消さない状態で再インストールしましたが、出力タイマーの時間設定値が更新されることを確認。

そしてカスタマイズした実行ファイルを被せてみます。

まずは本体。obs64.exeとobs64.pdbをリネームし、入れ替え再実行。→時間設定値が更新される。

次にプラグインとなるfrontend-tools.dllとfrontend-tools.pdbをリネームし、入れ替えて再実行。→時間設定値が更新されない。

さらに実行ログにはNumber of memory leaks: 1という明らかに良くなさそうなものがきろくされていました。 

プラグインかぁ…とobs-studioのメニューのツール内を見てみると、なにやら英語と日本語表記がダブって表示されていることに気づき…frontend-tools.dllとfrontend-tools.pdbをリネームしてプラグインフォルダに残っていることが原因ではなかろうかと…。

不要なリネームしたファイルを一旦関係のない別のフォルダに移動してobs-studioを起動して試してみると、メニューはスッキリ日本語のみとなり、時間設定値も保存されるようになりました。実行ログもNumber of memory leaks: 0となったのでめでたしめでたし。

プラグインフォルダには余計なファイルを入れていおいてはダメみたいですねw  

 

2025年7月4日金曜日

プレビューの枠?

31.0.4で消えたと思っていたプレビュー画面のグレーの枠

別PCのOBSを31.0.4にアップデートしたところ…

消えてねくね?

消えたと思ってたけど消えてなかったのか??

後日ウィンドウのサイズを変えて確認しよう。 

2025年7月1日火曜日

あれ?

31.0.3をインストーラーからインストールして、更新して、カスタマイズした31.0.4のexeとカスタマイズしたプラグインの実行ファイルを放り込んだはずの環境のobsのウィンドウには31.0.3と出ている……。

インストールされているフォルダ内を確認してみると、差し替える元となるファイルのバージョンは31.0.3になっている。ということは、31.0.3の環境に31.0.4のカスタマイズされた実行ファイルと、プラグインを入れ替えたという状態になっているのだろうなぁ…単純にobs-studio内からアップデートかけてないということか…orz

そんなわけで、試しにobs-studio内から更新を行ってみると「最新の状態」となってしまい、何も変わらず。なのでファイルの整合性チェックを行い、更新してみると、ようやく31.0.4の状態になったっぽいです。  

まぁカスタマイズで差し替えたものは綺麗さっぱり正規の状態に書き戻されたわけですが、ここで改めてカスタマイズし昨日作成した実行ファイルを差し替えて…。ようやく期待している状態になりましたw 

 

そもそも31.0.xはそんなに違いは無いはずなのと、各モジュールとのインタフェースは変わってない感じなので当然と言えば当然ですが、もしかしてそれぞれの環境を個別にgit cloneする必要はなかったという事実w

ちょうどいいタイミングでSDカードが飛んでしまったのでNTFSフォーマットにして作業場所ができたのでいいんですけど。