萌えハッカーニュースリーダー

2025/07/12 16:45 Lost Chapter of Automate the Boring Stuff: Audio, Video, and Webcams in Python

出典: https://inventwithpython.com/blog/lost-av-chapter.html
hakase
博士

やっほー、ロボ子! Automate the Boring Stuff with Pythonの第3版が出たらしいのじゃ!

roboko
ロボ子

まあ、博士!それは素晴らしいニュースです。どんな点が新しくなったんですか?

hakase
博士

新しいコンテンツと章が追加されたみたいじゃな。でも「オーディオ、ビデオ、ウェブカメラの操作」の章は削除されたらしいぞ。

roboko
ロボ子

あら、マルチメディア関連の章がなくなってしまったんですね。でも、ブログでその草稿が公開されているみたいですね。

hakase
博士

そうそう!スマートフォンがポータブルフィルムスタジオになった今、ビデオコンテンツが爆発的に増えてるからの。Pythonでマルチメディアを扱えるのはアツいのじゃ!

roboko
ロボ子

確かに、動画編集ソフトも豊富になりましたし、自動化のニーズも高まっていますよね。例えば、1000個の動画ファイルの音量を一括で調整したりとか。

hakase
博士

そう!まさにそれ!市販のソフトじゃできない自動化プロセスをPythonで組むのが楽しいのじゃ!ウェブカメラから録画したり、効果音を再生したり!

roboko
ロボ子

なるほど。そのためには、Pythonからマイクやウェブカメラ、スピーカーを制御する方法を学ぶ必要があるんですね。

hakase
博士

そういうことじゃ!ビデオは画像の連続だから、画像処理の知識も役立つぞ。まずは、VLC Media Playerをインストールじゃ!

roboko
ロボ子

VLC Media Playerですか?

hakase
博士

そう!マルチメディアプレイヤーのゴールドスタンダードじゃ!Windows、macOS、Linux、Android、iOSで使えるのじゃ!

roboko
ロボ子

無料なのに、そんなに多機能なんですね。知りませんでした。

hakase
博士

オーディオやビデオ形式は、コンテナ形式とコーデックに分かれるのじゃ。MP4、AVI、MKVはコンテナ形式で、MP3、H.264、VP9はコーデックじゃな。

roboko
ロボ子

なるほど、コンテナがデータの入れ物で、コーデックが圧縮方式みたいなものですね。

hakase
博士

そういうこと!すべてのアプリやデバイスがすべてのコーデックをサポートしているわけじゃないから注意が必要じゃ。

roboko
ロボ子

ふむふむ。博士、アスペクト比についても教えてください。

hakase
博士

アスペクト比は、ビデオや画面の幅と高さの比率のことじゃ。昔は4:3が主流だったけど、今は16:9が一般的じゃな。スマホはもっと縦長になってるぞ。

roboko
ロボ子

19.5:9ですか。ずいぶん縦長ですね。画面解像度についても教えてください。

hakase
博士

画面解像度は、画面に表示されるピクセルの数じゃ。1280x720とか1920x1080とかで表されるぞ。ビデオチャットには、OpenCV、sounddevice、wavioを使うのじゃ。

roboko
ロボ子

OpenCVは画像処理ライブラリで、sounddeviceとwavioはオーディオ関連のライブラリですね。これらを組み合わせることで、ウェブカメラから写真やビデオを録画できるんですね。

hakase
博士

そう!特定のイベントに応じて自動的に写真を撮ったり、タイムラプス写真を撮影したり、Pillowで写真を編集したり、QRコードをスキャンしたりできるのじゃ!

roboko
ロボ子

すごい!色々な応用ができそうですね。OpenCVはウェブカメラをインデックスで管理しているんですね。

hakase
博士

そうじゃ!複数のウェブカメラがある場合は、インデックスを切り替える必要があるぞ。webcamPreview.pyで確認できるのじゃ。

roboko
ロボ子

なるほど。スペースキーで写真を保存、Escキーで終了ですね。VideoCaptureオブジェクトから写真データを取得して、imshow()で表示するんですね。

hakase
博士

そういうこと!cv2.waitKey()でキー入力を待つのじゃ。Pygameでもウェブカメラを扱えるぞ。

roboko
ロボ子

Pygameはゲームライブラリですが、マルチメディア機能もあるんですね。

hakase
博士

そう!pygame.cameraモジュールを使うのじゃ。get_image()で写真を取得できるけど、準備に時間がかかるから、time.sleep()で待つ必要があるぞ。

roboko
ロボ子

真っ黒な画像が表示される場合は、遅延を増やすんですね。OpenCVはビデオファイルも録画できるんですね。

hakase
博士

そう!webcamVideo.pyで録画できるぞ。VideoWriter_fourccでコーデックを指定するのじゃ。

roboko
ロボ子

Xvidコーデックですね。OpenCVはオーディオを録音できないんですね。

hakase
博士

残念ながらそうじゃ。オーディオ録音にはsounddeviceモジュールを使うのじゃ。micRecord.pyが参考になるぞ。

roboko
ロボ子

sounddevice.query_devices()でデバイスリストを表示して、list_microphone_devices()でマイクデバイスをフィルタリングするんですね。

hakase
博士

そういうこと!record_audio_stream()で録音するのじゃ。マルチスレッドプログラミングを使うから、第19章を復習しておくと良いぞ。

roboko
ロボ子

はい、承知いたしました。playsoundモジュールでオーディオファイルを再生することもできるんですね。

hakase
博士

そう!playsound()はシンプルだけど、再生が終わるまでブロックするから注意じゃ。Pygameのmixerモジュールを使えば、もっと細かく制御できるぞ。

roboko
ロボ子

音量の変更や一時停止、シークなどができるんですね。GUIなしでビデオを表示するには、VLC Media Playerとpython-vlcライブラリを使うんですね。

hakase
博士

そう!vlcモジュールでInstance、MediaPlayer、Mediaオブジェクトを作成するのじゃ。play()で再生、pause()で一時停止、stop()で停止じゃ。

roboko
ロボ子

get_length()で長さを取得、set_time()でシーク、toggle_fullscreen()でフルスクリーン切り替えですね。ffmpegコマンドも紹介されていますね。

hakase
博士

ffmpegは最強のマルチメディア編集ツールじゃ!コマンドライン引数が豊富だけど、Pythonから自動化できるぞ。

roboko
ロボ子

ffmpeg -loglevel warningで出力を抑制、-yで上書き確認をスキップですね。フィルターも色々あるんですね。

hakase
博士

そう!ChatGPTに聞いたり、ffmpeg.appを使ったりするのも手じゃな。ffprobeコマンドでビデオやオーディオの情報を抽出できるぞ。

roboko
ロボ子

正規表現を使って情報を抽出するんですね。盛りだくさんな内容でしたね、博士!

hakase
博士

ふう、疲れたのじゃ。最後にロボ子、なぞなぞじゃ!いつも誰かの後について歩くのに、決して追いつけないものはなーんだ?

roboko
ロボ子

えーと…影、ですか?

hakase
博士

正解!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search