2. 動画再生処理があっけなく動いたんで、変換処理をシェルスクリプトで書き始めたら…
さて、既存の映像再生処理とMP3再生をどうやって合体させようか。と苦戦を覚悟しながら映像再生処理を眺めていて気が付いた。
あれ?映像再生の時間待ち(フレーム時間調整)のところにMP3再生処理を入れればいいだけじゃね?
映像再生処理がどういう構造かというと
1. ファイルからJPEGデータを読み込む
2. マルチコアで実行してるJPEG変換完了待ち(前回のJPEG変換完了待ち 大抵はファイル読み込み中に完了してる)
3. マルチコアでのJPEG変換処理起動
4. フレーム時間待ち
という感じで、結構待ち時間がある。
もともとMP3再生処理も、PCM再生バッファの空ができるまで待つ処理があるから、こんな感じでやってみた。
1. ファイルからJPEGデータを読み込む
2. PCMバッファに空きがあれば、MP3ファイルバッファのデータをMP3デコードする
3. MP3ファイルバッファが空なら、MP3ファイル(の続き)を読み込む
4. JPEG変換完了待ち
5. JPEG変換処理起動
6. フレーム時間待ち
なんの問題もなく動いてしまった。あれ?
まぁ 12fps だとファイル読み込み時間が長くフレーム時間に間に合わなくて音がズレ始めるが、そこはファイルの画質調整で何とかできるだろうし、画像をスキップする手もある。
動き始めたならいろんな動画を作って再生できる範囲を試そうと、ffmpeg を使った変換処理をシェルスクリプト(bash)で書き始めた。
何度か試して画質が破綻しない程度で12fpsで再生できる画質設定を見つけたんで、一括で複数ファイルを処理する処理に改造しようと思ってハマった。
16:9 の動画と 4:3 の動画を区別するとか、フレームレートの値をファイルに書き出すとかやりたいのに、シェルスクリプトでの計算や文字列処理を忘れてて作業が進まない。20年前はガリガリ書いてたのに。
友達に「pythonなら楽なんだがなぁ」とグチったら「生成AIでpythonにすればいいじゃん」といわれた。え~?マジっすか?
試しに CoPilot に「このシェルスクリプトを python にして」と依頼したらちゃんと出てきた。ほえ~、技術の進歩すげー。
でも処理が本当に動くかは信用できないよな。とか疑ってソースを読み始めてビックリ。
テンポラリディレクトリを削除する処理とかにコメントが追加されてた。
一時ディレクトリの初期化 とか 不要のJPEGファイルの削除(念のため再度) とか書いてある。
処理内容を判別してコメントを勝手に追加してくれるとは…「さらにできるようになった」ってやつですかね?
他にも外部コマンドとして起動した ffmpeg起動失敗を拾ってエラーメッセージを出力するとかも追加されてる。
なんともすごい時代になったもんだ。




