{"id":50914,"date":"2024-09-18T00:00:00","date_gmt":"2024-09-18T07:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/"},"modified":"2025-11-14T07:56:53","modified_gmt":"2025-11-14T15:56:53","slug":"building-video-summarizer-using-ai","status":"publish","type":"post","link":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/","title":{"rendered":"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a"},"content":{"rendered":"<p>OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001\u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8981\u7d04\u306f\u4e3b\u306b\u4eba\u9593\u306e\u8996\u899a\u3068\u8074\u899a\u306b\u983c\u3063\u3066\u3044\u307e\u3057\u305f\u3002\u3057\u304b\u3057\u3001<a href=\"https:\/\/platform.openai.com\/docs\/models\/gpt-4-turbo-and-gpt-4\">GPT-4<\/a>\u3084<a href=\"https:\/\/platform.openai.com\/docs\/models\/whisper\">Whisper<\/a>\u306a\u3069\u306eAI\u30e2\u30c7\u30eb\u306b\u3088\u308a\u3001\u3053\u306e\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>OpenAI\u3001Node.js\u3001React\u3001GridDB\u3068\u3044\u3063\u305f\u6280\u8853\u3092\u6d3b\u7528\u3057\u307e\u3059\u3002\u672c\u30d6\u30ed\u30b0\u3067\u306f\u3001\u52d5\u753b\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3001\u305d\u306e\u5185\u5bb9\u306e\u8981\u7d04\u3092\u53d7\u3051\u53d6\u308b\u305f\u3081\u306e\u57fa\u672c\u7684\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3059\u3002<\/p>\n<h2>\u306f\u3058\u3081\u306b<\/h2>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u304b\u3089\u5165\u624b\u3067\u304d\u307e\u3059\u3002 <code>$ git clone https:\/\/github.com\/griddbnet\/Blogs --branch voice_summarizer<\/code><\/p>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f Ubuntu 20.04 LTS \u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u5fc5\u9808\u306e\u30b9\u30bf\u30c3\u30af\u8981\u4ef6\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<h3>OpenAI \u30ad\u30fc<\/h3>\n<p>OpenAI \u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001\u6709\u52b9\u306a\u30ad\u30fc\u304c\u5fc5\u8981\u3067\u3059\u3002<a href=\"https:\/\/platform.openai.com\/api-keys\">\u3053\u3061\u3089\u306e\u30ea\u30f3\u30af<\/a>\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u65b0\u3057\u3044 OpenAI \u30ad\u30fc\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/openai-key.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/openai-key.png\" alt=\"\" width=\"2992\" height=\"1322\" class=\"aligncenter size-full wp-image-30243\" srcset=\"\/wp-content\/uploads\/2024\/09\/openai-key.png 2992w, \/wp-content\/uploads\/2024\/09\/openai-key-300x133.png 300w, \/wp-content\/uploads\/2024\/09\/openai-key-1024x452.png 1024w, \/wp-content\/uploads\/2024\/09\/openai-key-768x339.png 768w, \/wp-content\/uploads\/2024\/09\/openai-key-1536x679.png 1536w, \/wp-content\/uploads\/2024\/09\/openai-key-2048x905.png 2048w, \/wp-content\/uploads\/2024\/09\/openai-key-600x265.png 600w\" sizes=\"(max-width: 2992px) 100vw, 2992px\" \/><\/a><\/p>\n<p>OpenAI\u30ad\u30fc\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d9\u30fc\u30b9\u306a\u306e\u3067\u3001\u307e\u305aOpenAI\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u4f7f\u7528\u3059\u308b\u30e2\u30c7\u30eb\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001<code>gpt-4o<\/code>\u3068<code>whisper<\/code>\u30e2\u30c7\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/openai-enabled-models.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/openai-enabled-models.png\" alt=\"\" width=\"2542\" height=\"640\" class=\"aligncenter size-full wp-image-30242\" srcset=\"\/wp-content\/uploads\/2024\/09\/openai-enabled-models.png 2542w, \/wp-content\/uploads\/2024\/09\/openai-enabled-models-300x76.png 300w, \/wp-content\/uploads\/2024\/09\/openai-enabled-models-1024x258.png 1024w, \/wp-content\/uploads\/2024\/09\/openai-enabled-models-768x193.png 768w, \/wp-content\/uploads\/2024\/09\/openai-enabled-models-1536x387.png 1536w, \/wp-content\/uploads\/2024\/09\/openai-enabled-models-2048x516.png 2048w, \/wp-content\/uploads\/2024\/09\/openai-enabled-models-600x151.png 600w\" sizes=\"(max-width: 2542px) 100vw, 2542px\" \/><\/a><\/p>\n<p>OpenAI\u30ad\u30fc\u306f <code>.env<\/code> \u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3055\u308c\u3001<code>.gitignore<\/code> \u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306b\u542b\u3081\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<h3>Node.js<\/h3>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306fNode.js\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u3053\u3061\u3089\u304b\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<a href=\"https:\/\/nodejs.org\/en\/download\">\u3053\u306e<\/a> \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc <code>nvm<\/code> \u3068Node.js v16.20.2 LTS\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\"># installs nvm (Node Version Manager)\ncurl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.7\/install.sh | bash\n\n# download and install Node.js\nnvm install 16\n\n# verifies the right Node.js version is in the environment\nnode -v # should print `v16.20.2`\n\n# verifies the right NPM version is in the environment\nnpm -v # should print `8.19.4``<\/code><\/pre>\n<\/div>\n<p>Node.js\u3068GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u63a5\u7d9a\u3059\u308b\u306b\u306f\u3001GridDB C\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068Node\u30a2\u30c9\u30aa\u30f3API\u3092\u4f7f\u7528\u3057\u3066\u958b\u767a\u3055\u308c\u305fNode.js\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3067\u3042\u308b<a href=\"https:\/\/github.com\/nodejs\/node-addon-api\">gridb-node-api<\/a> npm\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<h3>FFmpeg<\/h3>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001<a href=\"https:\/\/www.npmjs.com\/package\/fluent-ffmpeg\"><code>fluent-ffmpeg<\/code><\/a> npm\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u306bFFmpeg\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002Ubuntu\u306e\u5834\u5408\u306f\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo apt update\nsudo apt install ffmpeg<\/code><\/pre>\n<\/div>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306b\u95a2\u3059\u308b\u3088\u308a\u8a73\u3057\u3044\u60c5\u5831\u306f\u3001<a href=\"https:\/\/ffmpeg.org\/\">FFmpeg\u516c\u5f0f\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8<\/a>\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>GridDB<\/h3>\n<p>\u52d5\u753b\u30b5\u30de\u30ea\u30fc\u3068\u52d5\u753b\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u3001GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u8a73\u3057\u3044\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306f<a href=\"https:\/\/docs.griddb.net\/latest\/gettingstarted\/using-apt\/#install-with-apt-get\">\u30ac\u30a4\u30c9<\/a>\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u3067\u306fUbuntu 20.04 LTS\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<p>GridDB\u3092\u8d77\u52d5\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo systemctl status gridstore<\/code><\/pre>\n<\/div>\n<p>\u5b9f\u884c\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo systemctl start gridstore<\/code><\/pre>\n<\/div>\n<h2>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b<\/h2>\n<h3>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u53d6\u5f97\u3059\u308b<\/h3>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u3053\u306e<a href=\"https:\/\/github.com\/junwatu\/video-summarizer-nodejs-griddb\">\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u304b\u3089\u30b3\u30fc\u30c9\u3092\u30af\u30ed\u30fc\u30f3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">git clone https:\/\/github.com\/junwatu\/video-summarizer-nodejs-griddb.git<\/code><\/pre>\n<\/div>\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092 <code>app<\/code> \u30d5\u30a9\u30eb\u30c0\u306b\u5909\u66f4\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">cd video-summarizer-nodejs-griddb\nnpm install<\/code><\/pre>\n<\/div>\n<h3><code>.env<\/code> \u306e\u8a2d\u5b9a<\/h3>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3044\u304f\u3064\u304b\u306e\u74b0\u5883\u5909\u6570\u304c\u5fc5\u8981\u3067\u3059\u3002 <code>env.example<\/code> \u30d5\u30a1\u30a4\u30eb\u3092 <code>.env<\/code> \u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">cp .env .example .env<\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u74b0\u5883\u5909\u6570\u3092\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">OPENAI_API_KEY=sk-....\nVITE_API_URL=http:\/\/localhost:3000<\/code><\/pre>\n<\/div>\n<p><code>VITE_API_URL<\/code> \u74b0\u5883\u5909\u6570\u3092\u5909\u66f4\u3059\u308b\u305f\u3073\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u958b\u59cb<\/h3>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">npm run start:build<\/code><\/pre>\n<\/div>\n<h3>\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u3092\u958b\u304f<\/h3>\n<p>\u30d6\u30e9\u30a6\u30b6\u3067\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u3092\u958b\u304d\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306eURL\u306f <code>http:\/\/localhost:3000<\/code> \u3067\u3059\u3002\u4efb\u610f\u306e\u52d5\u753b\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002\u51e6\u7406\u3092\u65e9\u304f\u884c\u3046\u306b\u306f\u77ed\u3044\u52d5\u753b\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<code>test\/video<\/code> \u30d5\u30a9\u30eb\u30c0\u5185\u306e\u52d5\u753b\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u52d5\u753b\u306e\u9577\u3055\u306b\u3082\u3088\u308a\u307e\u3059\u304c\u3001\u51e6\u7406\u306b\u306f1\u5206\u307b\u3069\u304b\u304b\u308a\u307e\u3059\u3002 <a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/ai-powered-video-summary.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/ai-powered-video-summary.png\" alt=\"\" width=\"1219\" height=\"850\" class=\"aligncenter size-full wp-image-30244\" srcset=\"\/wp-content\/uploads\/2024\/09\/ai-powered-video-summary.png 1219w, \/wp-content\/uploads\/2024\/09\/ai-powered-video-summary-300x209.png 300w, \/wp-content\/uploads\/2024\/09\/ai-powered-video-summary-1024x714.png 1024w, \/wp-content\/uploads\/2024\/09\/ai-powered-video-summary-768x536.png 768w, \/wp-content\/uploads\/2024\/09\/ai-powered-video-summary-600x418.png 600w\" sizes=\"(max-width: 1219px) 100vw, 1219px\" \/><\/a><\/p>\n<h2>\u4ed5\u7d44\u307f<\/h2>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u307e\u305f\u306f\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u306e\u30e6\u30fc\u30b6\u30fc\u30d5\u30ed\u30fc\u306f\u3001\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u3092\u958b\u304d\u3001\u52d5\u753b\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3001\u51e6\u7406\u3092\u5f85\u3061\u3001\u8981\u7d04\u7d50\u679c\u3092\u53d7\u3051\u53d6\u308b\u3068\u3044\u3046\u3082\u306e\u3067\u3059\u3002\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30e6\u30fc\u30b6\u30fc\u52d5\u753b\u306e\u8981\u7d04\u306b\u306f\u3001OpenAI\u306eGPT-4o\u3068Whisper\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002OpenAI\u306e\u30e2\u30c7\u30eb\u306f\u52d5\u753b\u3092\u76f4\u63a5\u51e6\u7406\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f2\u3064\u306e\u30e2\u30c7\u30eb\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u753b\u50cf\u3084\u97f3\u58f0\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\u306f\u53ef\u80fd\u3067\u3059\u3002\u4e00\u65b9\u3001Node.js\u3067\u306f\u3001\u52d5\u753b\u3092\u753b\u50cf\u3068\u97f3\u58f0\u30d5\u30a1\u30a4\u30eb\u306b\u5206\u96e2\u3059\u308b\u305f\u3081\u306b\u3001<a href=\"https:\/\/www.npmjs.com\/package\/fluent-ffmpeg\"><code>fluent-ffmpeg<\/code><\/a>\u3068\u3044\u3046npm\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3089\u306f\u3001OpenAI\u30e2\u30c7\u30eb\u306b\u52d5\u753b\u3092\u5165\u529b\u3057\u3066\u8981\u7d04\u51e6\u7406\u3092\u884c\u3046\u524d\u306b\u3001\u52d5\u753b\u306b\u5bfe\u3057\u3066\u884c\u3046\u4e3b\u306a\u6e96\u5099\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002<\/p>\n<h3>1&#46; \u52d5\u753b\u306e\u51e6\u7406<\/h3>\n<p>\u52d5\u753b\u3092\u305d\u306e\u307e\u307eAPI\u306b\u9001\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\u304c\u3001\u30d5\u30ec\u30fc\u30e0\u3092\u30b5\u30f3\u30d7\u30ea\u30f3\u30b0\u3057\u3066\u753b\u50cf\u3068\u3057\u3066\u63d0\u4f9b\u3059\u308c\u3070\u3001GPT-4o\u306f\u52d5\u753b\u3092\u7406\u89e3\u3067\u304d\u308b\u3002\u3053\u306e\u30bf\u30b9\u30af\u3067\u306f\u3001\u4ee5\u524d\u306eGPT-4 Turbo\u30e2\u30c7\u30eb\u3088\u308a\u3082\u9ad8\u3044\u6027\u80fd\u3092\u767a\u63ee\u3059\u308b\u3002<\/p>\n<p>\u3053\u306e\u95a2\u6570 <code>extractFrames()<\/code> \u306f\u3001\u52d5\u753b\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u753b\u50cf\u3092\u62bd\u51fa\u3057\u3001<code>frames<\/code> \u30d5\u30a9\u30eb\u30c0\u306b\u4fdd\u5b58\u3059\u308b\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">export function extractFrames(videoPath, secondsPerFrame, outputFolder) {\n    return new Promise((resolve, reject) => {\n        const frameRate = 1 \/ secondsPerFrame\n        const framePattern = path.join(outputFolder, 'frame-%03d.png')\n\n        ffmpeg(videoPath)\n            .outputOptions([`-vf fps=${frameRate}`])\n            .output(framePattern)\n            .on('end', () => {\n                fs.readdir(outputFolder, (err, files) => {\n                    if (err) {\n                        reject(err)\n                    } else {\n                        const framePaths = files.map(file => path.join(outputFolder, file))\n                        resolve(framePaths)\n                    }\n                })\n            })\n            .on('error', reject)\n            .run()\n    })\n}<\/code><\/pre>\n<\/div>\n<p>\u95a2\u6570 <code>extractFrames<\/code> \u306b\u304a\u3044\u3066\u3001\u30d1\u30e9\u30e1\u30fc\u30bf <code>secondsPerFrame<\/code> \u306f\u3001\u52d5\u753b\u304b\u3089\u62bd\u51fa\u3057\u305f\u3044\u30d5\u30ec\u30fc\u30e0\u9593\u306e\u9593\u9694\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001<code>secondsPerFrame<\/code> \u306f\u3001\u62bd\u51fa\u3055\u308c\u308b\u5404\u30d5\u30ec\u30fc\u30e0\u306e\u9593\u9694\u3092\u4f55\u79d2\u306b\u3059\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306b\u305d\u306e\u4ed5\u7d44\u307f\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8\u306e\u8a08\u7b97:\u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8\u306f\u3001secondsPerFrame \u306e\u9006\u6570\u3068\u3057\u3066\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002\u3064\u307e\u308a\u3001frameRate = 1 \/ secondsPerFrame \u3068\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u6b21\u306e\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002<\/p>\n<ul>\n<li><code>secondsPerFrame<\/code> \u304c 1 \u306e\u5834\u5408\u3001\u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8\u306f\u6bce\u79d2 1 \u30d5\u30ec\u30fc\u30e0\u3068\u306a\u308a\u307e\u3059\u3002<\/li>\n<li><code>secondsPerFrame<\/code> \u304c 0.5 \u306e\u5834\u5408\u3001\u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8\u306f\u6bce\u79d2 2 \u30d5\u30ec\u30fc\u30e0\u3068\u306a\u308a\u307e\u3059\u3002<\/li>\n<li>secondsPerFrame \u304c 2 \u306e\u5834\u5408\u3001\u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8\u306f\u6bce\u79d2 0.5 \u30d5\u30ec\u30fc\u30e0(2 \u79d2\u306b 1 \u30d5\u30ec\u30fc\u30e0)\u3068\u306a\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n<h3>2&#46; \u753b\u50cf\u51e6\u7406<\/h3>\n<p>GPT-4o\u30e2\u30c7\u30eb\u306f\u753b\u50cf\u3092\u76f4\u63a5\u51e6\u7406\u3057\u3001\u753b\u50cf\u306b\u57fa\u3065\u3044\u3066\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30c8\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u753b\u50cf\u306f2\u3064\u306e\u5f62\u5f0f\u3067\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002 * Base64 Encoded * URL<\/p>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u753b\u50cf\u306b base64 \u30a8\u30f3\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u95a2\u6570 <code>imageToBase64()<\/code> \u306f\u5404\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u3001base64 \u30a8\u30f3\u30b3\u30fc\u30c9\u753b\u50cf\u306b\u5909\u63db\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">export function imageToBase64(imagePath) {\n    return new Promise((resolve, reject) => {\n        fs.readFile(imagePath, (err, data) => {\n            if (err) {\n                reject(err)\n            } else {\n                const base64String = data.toString('base64')\n                resolve(base64String)\n            }\n        })\n    })\n}<\/code><\/pre>\n<\/div>\n<h3>3&#46; \u97f3\u58f0\u62bd\u51fa<\/h3>\n<p>\u3088\u308a\u826f\u3044\u6587\u8108\u8981\u7d04\u3092\u884c\u3046\u305f\u3081\u306b\u3001OpenAI\u30e2\u30c7\u30eb\u306b\u97f3\u58f0\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d3\u30c7\u30aa\u304b\u3089\u97f3\u58f0\u3092\u62bd\u51fa\u3059\u308b\u306b\u306f\u3001npm\u306e<code>fluent-ffmpeg<\/code>\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u97f3\u58f0\u7d50\u679c\u306f<code>mp3<\/code>\u5f62\u5f0f\u3067\u3001<code>audio<\/code>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">\/\/ Function to extract audio from video\nexport function extractAudio(videoPath, audioPath) {\n    return new Promise((resolve, reject) => {\n        ffmpeg(videoPath)\n            .output(audioPath)\n            .audioBitrate('32k')\n            .on('end', resolve)\n            .on('error', reject)\n            .run()\n    })\n}<\/code><\/pre>\n<\/div>\n<h3>4&#46; \u97f3\u58f0\u306e\u66f8\u304d\u8d77\u3053\u3057<\/h3>\n<p>\u97f3\u58f0\u3092\u62bd\u51fa\u3057\u305f\u5f8c\u3001\u97f3\u58f0\u8a8d\u8b58\u30e2\u30c7\u30ebWhisper\u3092\u4f7f\u7528\u3057\u3066\u97f3\u58f0\u3092\u30c6\u30ad\u30b9\u30c8\u306b\u66f8\u304d\u8d77\u3053\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">async function transcribeAudio(filePath) {\n    try {\n        const transcription = await openai.audio.transcriptions.create({\n            file: fs.createReadStream(filePath),\n            model: 'whisper-1'\n        })\n        return transcription.text\n    } catch (error) {\n        throw new Error(`Transcription failed: ${error.message}`)\n    }\n}<\/code><\/pre>\n<\/div>\n<p><code>transcribeAudio()<\/code> \u306f\u3001<code>whisper-1<\/code> AI\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3057\u3066\u30aa\u30fc\u30c7\u30a3\u30aa\u30d5\u30a1\u30a4\u30eb\u3092\u30c6\u30ad\u30b9\u30c8\u306b\u5909\u63db\u3057\u307e\u3059\u3002\u3053\u306e\u97f3\u58f0\u30c6\u30ad\u30b9\u30c8\u5909\u63db\u30e2\u30c7\u30eb\u306e\u52d5\u4f5c\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001<a href=\"https:\/\/openai.com\/index\/whisper\/\">\u3053\u3061\u3089<\/a>\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u30d3\u30c7\u30aa\u51e6\u7406\u3001\u753b\u50cf\u51e6\u7406\u3001\u304a\u3088\u3073\u97f3\u58f0\u62bd\u51fa\u7528\u306e\u30b3\u30fc\u30c9\u306f\u3001\u30d5\u30a1\u30a4\u30eb <code>libs\/videoProcessing.js<\/code> \u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2>\u30d3\u30c7\u30aa\u8981\u7d04\u30d7\u30ed\u30bb\u30b9<\/h2>\n<p>\u30d3\u30c7\u30aa\u8981\u7d04\u306f\u3001\u30d3\u30c7\u30aa\u306e\u8996\u899a\u304a\u3088\u3073\u97f3\u58f0\u306e\u66f8\u304d\u8d77\u3053\u3057\u8981\u7d20\u3092\u540c\u6642\u306b\u30e2\u30c7\u30eb\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u4e21\u65b9\u306e\u5165\u529b\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u3067\u3001\u30e2\u30c7\u30eb\u306f\u30d3\u30c7\u30aa\u5168\u4f53\u3092\u4e00\u5ea6\u306b\u628a\u63e1\u3067\u304d\u308b\u305f\u3081\u3001\u3088\u308a\u6b63\u78ba\u306a\u8981\u7d04\u3092\u4f5c\u6210\u3067\u304d\u308b\u3068\u671f\u5f85\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">\/\/ Generate a summary with visual and audio transcription\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n    \/\/ eslint-disable-next-line no-undef\n    apiKey: process.env.OPENAI_API_KEY\n});\n\nasync function createVideoSummarization(frames, audioTranscription) {\n    const frameObjects = frames.map(x => ({\n        type: 'image_url',\n        image_url: {\n            url: `data:image\/jpg; base64, ${x}`,\n            detail: 'low'\n        }\n    }));\n\n    const response = await openai.chat.completions.create({\n        model: \"gpt-4o\",\n        messages: [{\n                role: \"system\",\n                content: \"You are generating a video summary. Please provide a summary of the video. Respond in Markdown.\"\n            }\n            ,\n            {\n                role: \"user\",\n                content: [{\n                        type: 'text',\n                        text: \"These are the frames from the video.\"\n                    }\n                    ,\n                    ...frameObjects,\n                    {\n                        type: 'text',\n                        text: `The audio transcription is: ${audioTranscription}`\n                    }\n                ],\n            }\n            ,\n        ],\n        temperature: 0,\n    });\n    console.log(response.choices[0].message.content);\n    return response;\n}\n\nexport { createVideoSummarization }<\/code><\/pre>\n<\/div>\n<p>content` \u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u914d\u5217\u3067\u3042\u308a\u3001\u30c6\u30ad\u30b9\u30c8\u3084\u753b\u50cf\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u52d5\u753b\u306e\u8981\u7d04\u3001\u753b\u50cf\u30d5\u30ec\u30fc\u30e0\u306e\u8ffd\u52a0\u3001\u3088\u308a\u9069\u5207\u306a\u6587\u8108\u306e\u305f\u3081\u306e\u97f3\u58f0\u30c6\u30ad\u30b9\u30c8\u306e\u8ee2\u5199\u306a\u3069\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001<a href=\"https:\/\/platform.openai.com\/docs\/api-reference\/chat\/create\">Chat API<\/a> \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h2>\u30d3\u30c7\u30aa\u306e\u6982\u8981\u3092GridDB\u306b\u4fdd\u5b58<\/h2>\n<p>\u30d3\u30c7\u30aa\u306e\u6982\u8981\u3001\u30d3\u30c7\u30aa\u306e\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3001\u304a\u3088\u3073\u97f3\u58f0\u306e\u66f8\u304d\u8d77\u3053\u3057\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u3001GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u30b3\u30fc\u30c9\u306f\u3001<code>griddbservices.js<\/code>\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">export async function saveData({ filename, audioTranscription, summary }) {\n    const id = generateRandomID();\n    const videoFilename = String(filename);\n    const audioToText = String(audioTranscription);\n    const videoSummary = String(summary);\n\n    const packetInfo = [parseInt(id), videoFilename, audioToText, videoSummary];\n    const saveStatus = await GridDB.insert(packetInfo, collectionDb);\n    return saveStatus;\n}<\/code><\/pre>\n<\/div>\n<p>\u3053\u3053\u3067\u306f3\u3064\u306e\u91cd\u8981\u306a\u5206\u91ce\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<table>\n<thead>\n<tr>\n<th>\u30d1\u30e9\u30e1\u30fc\u30bf<\/th>\n<th>\u30bf\u30a4\u30d7<\/th>\n<th>\u8aac\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>\u30d5\u30a1\u30a4\u30eb\u540d<\/code><\/td>\n<td>String<\/td>\n<td>\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u540d.<\/td>\n<\/tr>\n<tr>\n<td><code>\u97f3\u58f0\u6587\u5b57\u8d77\u3053\u3057<\/code><\/td>\n<td>String<\/td>\n<td>\u52d5\u753b\u306e\u97f3\u58f0\u3092\u66f8\u304d\u8d77\u3053\u3057\u305f\u3082\u306e\u3002<\/td>\n<\/tr>\n<tr>\n<td><code>\u307e\u3068\u3081<\/code><\/td>\n<td>String<\/td>\n<td>\u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6982\u8981\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>saveData<code>\u95a2\u6570\u306f\u3001GridDB\u306b\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u30e9\u30c3\u30d1\u30fc\u3067\u3059\u3002\u30c7\u30fc\u30bf\u3092\u5b9f\u969b\u306b\u4fdd\u5b58\u3059\u308b\u30b3\u30fc\u30c9\u306f\u3001<\/code>libs\/griddb.cjs` \u30d5\u30a1\u30a4\u30eb\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2>\u3059\u3079\u3066\u306e\u30b5\u30de\u30ea\u30fc\u3092\u53d6\u5f97<\/h2>\n<p>\u3059\u3079\u3066\u306e\u30b5\u30de\u30ea\u30fc\u30c7\u30fc\u30bf\u306f\u3001<code>\/summaries<\/code> \u30eb\u30fc\u30c8\u3067\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306eURL\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">http:\/\/localhost:3000\/summaries<\/code><\/pre>\n<\/div>\n<p>\u30ec\u30b9\u30dd\u30f3\u30b9\u306fJSON\u30c7\u30fc\u30bf\u3067\u3042\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3055\u3089\u306a\u308b\u6a5f\u80fd\u3084\u62e1\u5f35\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u3067\u7c21\u5358\u306b\u51e6\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/all-summaries.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/09\/all-summaries.png\" alt=\"\" width=\"1654\" height=\"862\" class=\"aligncenter size-full wp-image-30245\" srcset=\"\/wp-content\/uploads\/2024\/09\/all-summaries.png 1654w, \/wp-content\/uploads\/2024\/09\/all-summaries-300x156.png 300w, \/wp-content\/uploads\/2024\/09\/all-summaries-1024x534.png 1024w, \/wp-content\/uploads\/2024\/09\/all-summaries-768x400.png 768w, \/wp-content\/uploads\/2024\/09\/all-summaries-1536x801.png 1536w, \/wp-content\/uploads\/2024\/09\/all-summaries-600x313.png 600w\" sizes=\"(max-width: 1654px) 100vw, 1654px\" \/><\/a><\/p>\n<h2>\u5236\u9650<\/h2>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u3067\u3042\u308a\u3001\u52d5\u753b\u306e\u9577\u3055\u304c5\u5206\u3092\u8d85\u3048\u306a\u3044MP4\u52d5\u753b\u3067\u30c6\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001\u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8981\u7d04\u306f\u4e3b\u306b\u4eba\u9593\u306e\u8996\u899a\u3068\u8074\u899a\u306b\u983c\u3063\u3066\u3044\u307e\u3057\u305f\u3002 [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":49731,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1005],"tags":[],"class_list":["post-50914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1005"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/building-video-summarizer-using-ai\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/building-video-summarizer-using-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-18T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T15:56:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"griddb-admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"griddb-admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/\"},\"author\":{\"name\":\"griddb-admin\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\"},\"headline\":\"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a\",\"datePublished\":\"2024-09-18T07:00:00+00:00\",\"dateModified\":\"2025-11-14T15:56:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/\"},\"wordCount\":93,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/\",\"url\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/\",\"name\":\"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg\",\"datePublished\":\"2024-09-18T07:00:00+00:00\",\"dateModified\":\"2025-11-14T15:56:53+00:00\",\"description\":\"OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg\",\"contentUrl\":\"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg\",\"width\":1792,\"height\":1024},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.griddb.net\/en\/#website\",\"url\":\"https:\/\/www.griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/www.griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\",\"name\":\"griddb-admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"caption\":\"griddb-admin\"},\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/author\/griddb-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a | GridDB: Open Source Time Series Database for IoT","description":"OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/building-video-summarizer-using-ai\/","og_locale":"ja_JP","og_type":"article","og_title":"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a | GridDB: Open Source Time Series Database for IoT","og_description":"OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001","og_url":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/building-video-summarizer-using-ai\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2024-09-18T07:00:00+00:00","article_modified_time":"2025-11-14T15:56:53+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg","type":"image\/jpeg"}],"author":"griddb-admin","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"\u57f7\u7b46\u8005":"griddb-admin","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/"},"author":{"name":"griddb-admin","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233"},"headline":"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a","datePublished":"2024-09-18T07:00:00+00:00","dateModified":"2025-11-14T15:56:53+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/"},"wordCount":93,"commentCount":0,"publisher":{"@id":"https:\/\/www.griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg","inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/","url":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/","name":"AI\u3092\u4f7f\u7528\u3057\u305f\u52d5\u753b\u8981\u7d04\u6a5f\u80fd\u306e\u958b\u767a | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/www.griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg","datePublished":"2024-09-18T07:00:00+00:00","dateModified":"2025-11-14T15:56:53+00:00","description":"OpenAI\u306b\u4ee3\u8868\u3055\u308c\u308bAI\u6280\u8853\u306e\u9032\u6b69\u306b\u3088\u308a\u3001\u3053\u308c\u307e\u3067\u624b\u52d5\u3067\u306f\u9762\u5012\u3059\u304e\u3066\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u305d\u306e\u4e00\u4f8b\u304c\u52d5\u753b\u8981\u7d04\u3067\u3059\u3002\u5f93\u6765\u3001","inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/building-video-summarizer-using-ai\/#primaryimage","url":"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg","contentUrl":"\/wp-content\/uploads\/2024\/09\/ezgif-4-cd66d05271.jpg","width":1792,"height":1024},{"@type":"WebSite","@id":"https:\/\/www.griddb.net\/en\/#website","url":"https:\/\/www.griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/www.griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/www.griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/www.griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233","name":"griddb-admin","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","caption":"griddb-admin"},"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/author\/griddb-admin\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts\/50914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/comments?post=50914"}],"version-history":[{"count":1,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts\/50914\/revisions"}],"predecessor-version":[{"id":51731,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts\/50914\/revisions\/51731"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/media\/49731"}],"wp:attachment":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/media?parent=50914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/categories?post=50914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/tags?post=50914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}