{"id":1728,"date":"2025-12-24T05:02:15","date_gmt":"2025-12-23T20:02:15","guid":{"rendered":"https:\/\/beeknowledge.co.jp\/?p=1728"},"modified":"2025-12-24T05:02:16","modified_gmt":"2025-12-23T20:02:16","slug":"%e8%a4%87%e6%95%b0%e3%82%ab%e3%83%a1%e3%83%a9%e5%90%8c%e6%9c%9f%ef%bc%88%e9%a0%ad%e5%87%ba%e3%81%97%ef%bc%89%e3%82%92%e3%80%8c%e3%83%94%e3%82%a8%e3%82%be%e3%83%96%e3%82%b6%e3%83%bc%e3%81%ae%e9%9f%b3","status":"publish","type":"post","link":"https:\/\/beeknowledge.co.jp\/?p=1728","title":{"rendered":"\u8907\u6570\u30ab\u30e1\u30e9\u540c\u671f\uff08\u982d\u51fa\u3057\uff09\u3092\u300c\u30d4\u30a8\u30be\u30d6\u30b6\u30fc\u306e\u97f3\u300d\u3067\u3084\u308b\uff1a\u8a2d\u8a08\u30fb\u691c\u51fa\u30fb\u5207\u308a\u51fa\u3057"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"ja\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>\u30d4\u30a8\u30be\u30d6\u30b6\u30fc\u540c\u671f\uff08\u982d\u51fa\u3057\uff09\u8a2d\u8a08 + \u30d4\u30fc\u30af\u691c\u51fa\u30b9\u30af\u30ea\u30d7\u30c8 + ffmpeg\u3067\u540c\u671f\u70b9\u304b\u3089\u52d5\u753b\u629c\u304d\u51fa\u3057<\/title>\n<style>\n  body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,\"Noto Sans JP\",\"Hiragino Kaku Gothic ProN\",\"Yu Gothic\",sans-serif; line-height:1.7; margin:24px; color:#111;}\n  h1,h2,h3{line-height:1.3}\n  .note{background:#f6f6f6;border:1px solid #ddd;border-radius:12px;padding:14px;margin:14px 0}\n  .warn{background:#fff3f3;border:1px solid #f2b8b8;border-radius:12px;padding:14px;margin:14px 0}\n  code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}\n  pre{background:#0b1020;color:#e6e6e6;padding:14px;border-radius:12px;overflow:auto}\n  .k{color:#9cdcfe} .s{color:#ce9178} .c{color:#6a9955}\n  ul{margin-top:6px}\n  .small{font-size:0.92em; color:#333}\n<\/style>\n<\/head>\n<body>\n\n\n\n<div class=\"note\">\n  <b>\u72d9\u3044\uff1a<\/b>\u8907\u6570\u306e\u6c11\u751f\u30ab\u30e1\u30e9\uff08\u30b9\u30de\u30db\u30fb\u30a2\u30af\u30b7\u30e7\u30f3\u30ab\u30e0\u7b49\uff09\u306e\u9332\u753b\u3092\u3001\u5192\u982d\u306b\u9cf4\u3089\u3057\u305f\u300c\u30d6\u30b6\u30fc\u97f3\u300d\u3092\u57fa\u6e96\u306b\u540c\u671f\u3057\u3001\n  ffmpeg\u3067\u540c\u3058\u6642\u523b\u304b\u3089\u52d5\u753b\u3092\u629c\u304d\u51fa\u3059\uff08\u982d\u51fa\u3057\uff09\u30a2\u30a4\u30c7\u30a2\u306e\u691c\u8a0e<br\/>\n  <b>\u524d\u63d0\uff1a<\/b>\u6c11\u751f\u54c1\u30de\u30a4\u30af\u306f\u9ad8\u5468\u6ce2\uff0810kHz\u8d85\uff09\u3092\u62fe\u3044\u306b\u304f\u3044\uff0f\u30aa\u30fc\u30c8\u30b2\u30a4\u30f3\uff08AGC\uff09\u3084\u30ce\u30a4\u30ba\u6291\u5236\u304c\u52dd\u624b\u306b\u5165\u308b\u3053\u3068\u304c\u3042\u308b\u3002\n<\/div>\n\n<h2>1. \u540c\u671f\u306e\u57fa\u672c\u6226\u7565\uff1a\u9ad8\u5468\u6ce2\u306f\u6368\u3066\u3066\u300c\u78ba\u5b9f\u306b\u5165\u308b\u5e2f\u57df\u300d\u3067\u52dd\u3064<\/h2>\n\n<ul>\n  <li><b>\u304a\u3059\u3059\u3081\u5468\u6ce2\u6570\u5e2f\uff1a<\/b>1kHz\u301c4kHz\uff08\u6c11\u751f\u30de\u30a4\u30af\u3067\u3082\u62fe\u3044\u3084\u3059\u304f\u3001\u74b0\u5883\u97f3\u3068\u88ab\u308a\u306b\u304f\u3044\uff09<\/li>\n  <li><b>\u907f\u3051\u305f\u3044\u5e2f\u57df\uff1a<\/b>8kHz\u301c\uff08\u7aef\u672b\u306b\u3088\u3063\u3066\u6025\u306b\u843d\u3061\u308b\uff0f\u5727\u7e2e\u3067\u6f70\u308c\u308b\uff0f\u6307\u5411\u6027\u3067\u5909\u52d5\u3059\u308b\uff09<\/li>\n  <li><b>\u540c\u671f\u30de\u30fc\u30ab\u30fc\u306f\u300c\u5358\u767a1\u56de\u300d\u3088\u308a\u300c\u30d1\u30bf\u30fc\u30f3\u300d\uff1a<\/b>\u8aa4\u691c\u51fa\u5bfe\u7b56\u306b\u3001\u4f8b\uff1a<b>0.0s, 0.4s, 1.2s<\/b>\u306e3\u56de\u30d3\u30fc\u30d7\uff08\u9593\u9694\u306b\u30af\u30bb\u3092\u4ed8\u3051\u308b\uff09<\/li>\n  <li><b>\u97f3\u304c\u4e0d\u5b89\u5b9a\u306a\u3089\u8996\u899a\u3082\u4f75\u7528\uff1a<\/b>\u30d6\u30b6\u30fc\u3068\u540c\u6642\u306bLED\u70b9\u6ec5\uff08\u6620\u50cf\u30d5\u30ec\u30fc\u30e0\u3067\u5408\u308f\u305b\u308b\uff09\u3082\u5f37\u3044<\/li>\n<\/ul>\n\n<div class=\"warn\">\n  <b>\u73fe\u5b9f\u306e\u7f60\uff1a<\/b>\u30b9\u30de\u30db\u7b49\u306fAGC\/\u30ce\u30a4\u30ba\u6291\u5236\u3067\u300c\u6700\u521d\u306e\u30d3\u30fc\u30d7\u3060\u3051\u5c0f\u3055\u304f\u306a\u308b\u300d\u300c\u7acb\u3061\u4e0a\u304c\u308a\u304c\u4e38\u304f\u306a\u308b\u300d\u3053\u3068\u304c\u3042\u308b\u3002<br\/>\n  \u5bfe\u7b56\u306f<b>\u30d3\u30fc\u30d7\u3092\u77ed\u304f\u3057\u3059\u304e\u306a\u3044\uff08100\u301c300ms\uff09<\/b>\u3001<b>3\u56de\u30d1\u30bf\u30fc\u30f3\u306b\u3059\u308b<\/b>\u3001<b>2\u301c4kHz\u306e\u5e2f\u57df\u3067\u691c\u51fa\u3059\u308b<\/b>\u3002\n<\/div>\n\n<h2>2. \u30d4\u30a8\u30be\u30d6\u30b6\u30fc\u8a2d\u8a08\uff08\u5358\u97f3\u3092\u78ba\u5b9f\u306b\u9cf4\u3089\u3059\uff1a\u5b9f\u88c5\u304c\u8a70\u307e\u3089\u306a\u3044\u7248\uff09<\/h2>\n\n<h3>2.1 \u30d4\u30a8\u30be\u306e\u7a2e\u985e\uff08\u3053\u3053\u9593\u9055\u3048\u308b\u3068\u5168\u90e8\u30ba\u30ec\u308b\uff09<\/h3>\n<ul>\n  <li><b>\u30a2\u30af\u30c6\u30a3\u30d6\u30d6\u30b6\u30fc\uff1a<\/b>DC\u7d66\u96fb\u3067\u52dd\u624b\u306b\u4e00\u5b9a\u97f3\u3002\u540c\u671f\u7528\u9014\u306a\u3089\u697d\uff08\u305f\u3060\u3057\u5468\u6ce2\u6570\u56fa\u5b9a\u304c\u591a\u3044\uff09\u3002<\/li>\n  <li><b>\u30d1\u30c3\u30b7\u30d6\uff08\u5727\u96fb\u7d20\u5b50\uff09\uff1a<\/b>PWM\u7b49\u3067\u4ea4\u6d41\u3092\u5165\u308c\u3066\u9cf4\u3089\u3059\u3002\u5468\u6ce2\u6570\u3092\u9078\u3079\u308b\uff08\u540c\u671f\u306e\u6700\u9069\u5316\u306b\u5f37\u3044\uff09\u3002<\/li>\n<\/ul>\n\n<h3>2.2 \u5468\u6ce2\u6570\u9078\u5b9a\uff1a\u5171\u632f\u70b9\u3092\u72d9\u3046\u304c\u300c\u9332\u308c\u308b\u5e2f\u57df\u300d\u304c\u6700\u512a\u5148<\/h3>\n<ul>\n  <li>\u5727\u96fb\u306f\u5171\u632f\u5468\u6ce2\u6570\uff08\u4f8b\uff1a2.7kHz\/4kHz\uff09\u304c\u3042\u308a\u3001\u305d\u3053\u304c\u4e00\u756a\u5927\u304d\u3044\u3002<\/li>\n  <li>\u305f\u3060\u3057\u540c\u671f\u306f\u300c\u6700\u5927\u97f3\u91cf\u300d\u3088\u308a\u300c\u5168\u30ab\u30e1\u30e9\u306b\u540c\u3058\u6ce2\u5f62\u3067\u5165\u308b\u300d\u3053\u3068\u304c\u5927\u4e8b\u3002<\/li>\n  <li>\u7d50\u8ad6\uff1a<b>\u307e\u305a2k\u301c4kHz<\/b>\u3067\u30c6\u30b9\u30c8 \u2192 \u4e00\u756a\u5b89\u5b9a\u3057\u3066\u5165\u308b\u5468\u6ce2\u6570\u306b\u56fa\u5b9a\u3002<\/li>\n<\/ul>\n\n<h3>2.3 \u99c6\u52d5\u56de\u8def\u306e\u8003\u3048\u65b9\uff08\u6c11\u751f\u30de\u30a4\u30af\u306b\u78ba\u5b9f\u306b\u5165\u308c\u308b\u97f3\u5727\u3092\u4f5c\u308b\uff09<\/h3>\n<ul>\n  <li><b>\u7247\u5074\u99c6\u52d5\uff08\u7c21\u5358\uff09\uff1a<\/b>MCU PWM \u2192 \u30c8\u30e9\u30f3\u30b8\u30b9\u30bf\uff08\u30ed\u30fc\u30b5\u30a4\u30c9\uff09 \u2192 \u30d4\u30a8\u30be \u2192 VCC<\/li>\n  <li><b>\u5dee\u52d5\u99c6\u52d5\uff08\u5f37\u3044\uff09\uff1a<\/b>\u30d4\u30a8\u30be\u4e21\u7aef\u3092\u9006\u76f8\u3067\u632f\u308b\uff08\u5b9f\u8cea\u96fb\u5727\u5dee\u304c\u5897\u3048\u3066\u97f3\u5727\u304c\u4e0a\u304c\u308b\uff09<\/li>\n<\/ul>\n\n<div class=\"note\">\n  <b>\u5dee\u52d5\u99c6\u52d5\u306e\u65e8\u307f\uff1a<\/b>\u7247\u5074\u30920\u301cV\u3067\u632f\u308b\u3088\u308a\u3001\u4e21\u7aef\u3092\u9006\u76f8\u306b\u3057\u3066\u00b1V\u76f8\u5f53\u306b\u3059\u308b\u3068\u3001\n  \u540c\u3058VCC\u3067\u3082\u97f3\u91cf\u304c\u4e0a\u304c\u308a\u3001\u540c\u671f\u304c\u5b89\u5b9a\u3059\u308b\uff08\u9060\u3044\u30ab\u30e1\u30e9\u306b\u3082\u5165\u308a\u3084\u3059\u3044\uff09\u3002\n<\/div>\n\n<h3>2.4 MCU\u5074\u306e\u5358\u97f3\u751f\u6210\uff08PWM\u5468\u6ce2\u6570\uff1d\u97f3\u306e\u5468\u6ce2\u6570\uff09<\/h3>\n<ul>\n  <li>\u4f8b\uff1a<b>3000Hz, \u30c7\u30e5\u30fc\u30c6\u30a350%<\/b>\u306ePWM\u3092100\u301c300ms\u51fa\u3059\u3002<\/li>\n  <li>\u30d1\u30bf\u30fc\u30f3\u4f8b\uff1a<b>200ms ON \/ 200ms OFF \/ 200ms ON \/ 600ms OFF \/ 200ms ON<\/b><\/li>\n<\/ul>\n\n<h2>3. \u540c\u671f\u70b9\uff08\u30d3\u30fc\u30d7\uff09\u306e\u691c\u51fa\uff1a\u30d4\u30fc\u30af\u5468\u6ce2\u6570 + \u30a8\u30cd\u30eb\u30ae\u30fc\u7acb\u3061\u4e0a\u304c\u308a\u3067\u53d6\u308b<\/h2>\n\n<div class=\"note\">\n  <b>\u65b9\u91dd\uff1a<\/b>\u5404\u52d5\u753b\u304b\u3089\u97f3\u58f0\u3092WAV\u306b\u62bd\u51fa \u2192 2\u301c4kHz\u4ed8\u8fd1\u3092\u898b\u3066\u30d3\u30fc\u30d7\u306e\u6642\u523b\u3092\u51fa\u3059\u3002<br\/>\n  <b>\u540c\u671f\uff1a<\/b>\u57fa\u6e96\u30ab\u30e1\u30e9\u306e\u30d3\u30fc\u30d7\u6642\u523b\u3068\u306e\u5dee\u5206\u3092\u30aa\u30d5\u30bb\u30c3\u30c8\uff08\u79d2\uff09\u3068\u3057\u3066\u7b97\u51fa\u3002\n<\/div>\n\n<h3>3.1 ffmpeg\u3067\u97f3\u58f0\u3092\u62bd\u51fa\uff08\u5168\u30ab\u30e1\u30e9\u3067\u6761\u4ef6\u3092\u63c3\u3048\u308b\uff09<\/h3>\n<pre><code># \u4f8b\uff1a\u52d5\u753b\u304b\u3089\u30e2\u30ce\u30e9\u30eb48kHz\u306eWAV\u3092\u62bd\u51fa\uff08\u5727\u7e2e\u97f3\u58f0\u306e\u7656\u3092\u6e1b\u3089\u3059\uff09\nffmpeg -y -i camA.mp4 -vn -ac 1 -ar 48000 -f wav camA.wav\nffmpeg -y -i camB.mp4 -vn -ac 1 -ar 48000 -f wav camB.wav\nffmpeg -y -i camC.mp4 -vn -ac 1 -ar 48000 -f wav camC.wav\n\n# \uff08\u4efb\u610f\uff09\u97f3\u91cf\u5dee\u304c\u6fc0\u3057\u3044\u5834\u5408\u306f\u6b63\u898f\u5316\u3057\u3066\u304b\u3089\u89e3\u6790\uff08AGC\u306e\u5f71\u97ff\u3092\u8584\u3081\u308b\uff09\nffmpeg -y -i camA.wav -af loudnorm camA_norm.wav\n<\/code><\/pre>\n\n<h3>3.2 Python\uff1a\u30d3\u30fc\u30d7\u306e\u300c\u958b\u59cb\u6642\u523b\u300d\u3092\u63a8\u5b9a\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\uff08\u5e2f\u57df\u30a8\u30cd\u30eb\u30ae\u30fc + \u3057\u304d\u3044\u5024\uff09<\/h3>\n\n<div class=\"warn\">\n  <b>\u6ce8\u610f\uff1a<\/b>\u3053\u308c\u306f\u300c\u7d76\u5bfeSPL(dB)\u300d\u306f\u51fa\u3057\u307e\u305b\u3093\u3002\u6c11\u751f\u30de\u30a4\u30af\u306f\u6821\u6b63\u3055\u308c\u3066\u306a\u3044\u306e\u3067\u3001\u6b63\u3057\u3044dB SPL\u306f\u51fa\u305b\u306a\u3044\u3002<br\/>\n  \u305f\u3060\u3057\u300c\u3069\u306e\u5468\u6ce2\u6570\u304c\u4e00\u756a\u5f37\u3044\u300d\u300c\u3069\u306e\u6642\u523b\u306b\u9cf4\u3063\u305f\u300d\u306f\u5341\u5206\u53d6\u308c\u308b\uff08\u540c\u671f\u76ee\u7684\u306a\u3089\u3053\u308c\u3067\u52dd\u3061\uff09\u3002\n<\/div>\n\n<pre><code class=\"language-python\"><span class=\"c\"># beep_detect.py<\/span>\n<span class=\"c\"># \u4f9d\u5b58: numpy scipy soundfile<\/span>\n<span class=\"c\">#   pip install numpy scipy soundfile<\/span>\n\n<span class=\"k\">import<\/span> numpy <span class=\"k\">as<\/span> np\n<span class=\"k\">import<\/span> soundfile <span class=\"k\">as<\/span> sf\n<span class=\"k\">from<\/span> scipy.signal <span class=\"k\">import<\/span> butter, sosfilt, get_window\n\nPREF_20UPA = 20e-6  <span class=\"c\"># \u53c2\u8003: SPL\u57fa\u6e96 (\u6821\u6b63\u304c\u7121\u3044\u3068\u4f7f\u308f\u306a\u3044)<\/span>\n\n<span class=\"k\">def<\/span> <span class=\"k\">bandpass<\/span>(x, fs, f1, f2, order=6):\n    sos = butter(order, [f1, f2], btype=<span class=\"s\">\"bandpass\"<\/span>, fs=fs, output=<span class=\"s\">\"sos\"<\/span>)\n    <span class=\"k\">return<\/span> sosfilt(sos, x)\n\n<span class=\"k\">def<\/span> <span class=\"k\">moving_rms<\/span>(x, win):\n    <span class=\"c\"># \u77ed\u6642\u9593RMS\uff08\u30a8\u30cd\u30eb\u30ae\u30fc\u5305\u7d61\uff09<\/span>\n    x2 = x * x\n    kernel = np.ones(win, dtype=np.float64) \/ win\n    <span class=\"k\">return<\/span> np.sqrt(np.convolve(x2, kernel, mode=<span class=\"s\">\"same\"<\/span>) + 1e-12)\n\n<span class=\"k\">def<\/span> <span class=\"k\">estimate_peak_freq<\/span>(x, fs, fmin=500, fmax=8000):\n    <span class=\"c\"># \u30d3\u30fc\u30d7\u5468\u6ce2\u6570\u306e\u5f53\u3066\uff08\u5168\u4f53FFT\u3067\u6700\u5927\u30d4\u30fc\u30af\uff09<\/span>\n    w = get_window(<span class=\"s\">\"hann\"<\/span>, x.size, fftbins=True)\n    X = np.fft.rfft(x * w)\n    freqs = np.fft.rfftfreq(x.size, d=1\/fs)\n    mag = np.abs(X)\n    idx = np.where((freqs &gt;= fmin) &amp; (freqs &lt;= fmax))[0]\n    i = idx[np.argmax(mag[idx])]\n    <span class=\"k\">return<\/span> float(freqs[i])\n\n<span class=\"k\">def<\/span> <span class=\"k\">detect_beep_time<\/span>(wav_path, band=(2000, 4000), rms_ms=10, thresh_k=6.0, min_gap_ms=150):\n    x, fs = sf.read(wav_path, dtype=<span class=\"s\">\"float64\"<\/span>)\n    <span class=\"k\">if<\/span> x.ndim == 2:\n        x = x[:, 0]\n\n    <span class=\"c\"># \u5bfe\u8c61\u5e2f\u57df\u3078<\/span>\n    y = bandpass(x, fs, band[0], band[1], order=6)\n\n    <span class=\"c\"># \u5305\u7d61<\/span>\n    win = max(1, int(fs * (rms_ms \/ 1000.0)))\n    env = moving_rms(y, win)\n\n    <span class=\"c\"># \u3057\u304d\u3044\u5024\uff1a\u4e2d\u592e\u5024 + k * MAD\uff08\u30ed\u30d0\u30b9\u30c8\uff09<\/span>\n    med = np.median(env)\n    mad = np.median(np.abs(env - med)) + 1e-12\n    thr = med + thresh_k * 1.4826 * mad\n\n    <span class=\"c\"># \u7acb\u3061\u4e0a\u304c\u308a\u691c\u51fa\uff08\u95be\u5024\u3092\u521d\u3081\u3066\u8d85\u3048\u305f\u30b5\u30f3\u30d7\u30eb\uff09<\/span>\n    idx = np.where(env &gt; thr)[0]\n    <span class=\"k\">if<\/span> idx.size == 0:\n        <span class=\"k\">return<\/span> <span class=\"k\">None<\/span>\n\n    <span class=\"c\"># \u96d1\u306a\u8aa4\u691c\u51fa\u6291\u5236\uff1a\u6700\u521d\u306e\u691c\u51fa\u70b9\u306e\u76f4\u524d\u3092\u5c11\u3057\u5dfb\u304d\u623b\u3059<\/span>\n    i0 = int(idx[0])\n    <span class=\"c\"># \u7acb\u3061\u4e0a\u304c\u308a\u3092\u63a2\u3059\uff08\u74b0\u5883\u97f3\u304b\u3089\u306e\u9077\u79fb\u70b9\uff09<\/span>\n    back = int(fs * 0.05)  <span class=\"c\"># 50ms<\/span>\n    j0 = max(0, i0 - back)\n    <span class=\"c\"># \u7acb\u3061\u4e0a\u304c\u308a\u306e\u5fae\u5206\u3067\u65e9\u3044\u70b9\u3092\u62fe\u3046\uff08\u7c21\u6613\uff09<\/span>\n    d = np.diff(env[j0:i0+1], prepend=env[j0])\n    k = np.argmax(d)\n    t = (j0 + k) \/ fs\n    <span class=\"k\">return<\/span> float(t)\n\n<span class=\"k\">if<\/span> __name__ == <span class=\"s\">\"__main__\"<\/span>:\n    <span class=\"k\">import<\/span> sys\n    wav = sys.argv[1]\n    <span class=\"c\"># \u307e\u305a\u5168\u4f53\u304b\u3089\u30d4\u30fc\u30af\u5468\u6ce2\u6570\u306e\u76ee\u5b89\u3092\u53d6\u308b\uff08\u30c7\u30d0\u30c3\u30b0\u7528\uff09<\/span>\n    x, fs = sf.read(wav, dtype=<span class=\"s\">\"float64\"<\/span>)\n    <span class=\"k\">if<\/span> x.ndim == 2:\n        x = x[:, 0]\n    f0 = estimate_peak_freq(x, fs, 500, 8000)\n    print(<span class=\"s\">f\"[info] estimated peak ~ {f0:.1f} Hz\"<\/span>)\n\n    t = detect_beep_time(wav, band=(2000, 4000), rms_ms=10, thresh_k=6.0)\n    print(<span class=\"s\">f\"[result] beep_time = {t}\"<\/span>)\n<\/code><\/pre>\n\n<p class=\"small\">\n  \u4f7f\u3044\u65b9\u4f8b\uff1a<code>python beep_detect.py camA_norm.wav<\/code> \u2192 beep_time\uff08\u79d2\uff09\u304c\u51fa\u308b\u3002<br\/>\n  \u30ab\u30e1\u30e9\u3054\u3068\u306b beep_time \u3092\u51fa\u3057\u3066\u3001\u57fa\u6e96\u30ab\u30e1\u30e9\u3068\u306e\u5dee\u5206\u304c\u540c\u671f\u30aa\u30d5\u30bb\u30c3\u30c8\uff08camB\u306f+0.183s\u9045\u308c\u3001\u306a\u3069\uff09\u3002\n<\/p>\n\n<h2>4. ffmpeg\u3067\u300c\u982d\u4f4d\u7f6e\u300d\u304b\u3089\u52d5\u753b\u3092\u629c\u304d\u51fa\u3059\uff08\u540c\u671f\u30aa\u30d5\u30bb\u30c3\u30c8\u3092\u53cd\u6620\uff09<\/h2>\n\n<h3>4.1 \u30aa\u30d5\u30bb\u30c3\u30c8\u304c\u51fa\u305f\u3089\u3001\u63c3\u3048\u305f\u958b\u59cb\u6642\u523b\u3067\u5207\u308b<\/h3>\n\n<div class=\"note\">\n  <b>\u4f8b\uff1a<\/b>\u57fa\u6e96camA\u306e\u30d3\u30fc\u30d7\u304c 12.340s\u3001camB\u304c 12.523s \u306a\u3089\u3001camB\u306f<b>0.183s\u9045\u308c\u3066\u9332\u308c\u3066\u3044\u308b<\/b>\u3002<br\/>\n  \u3064\u307e\u308a\u3001camB\u306f <b>-0.183s<\/b>\uff08= 0.183\u79d2\u65e9\u3081\uff09\u304b\u3089\u5207\u308a\u51fa\u3059\u3068\u63c3\u3046\u3002\n<\/div>\n\n<pre><code># \u4f8b\uff1a\u57fa\u6e96camA\u306f\u305d\u306e\u307e\u307e\u3001camB\u306f0.183\u79d2\u3060\u3051\u65e9\u3081\u3066\u982d\u51fa\u3057\u3092\u63c3\u3048\u308b\uff08\u518d\u30a8\u30f3\u30b3\u30fc\u30c9\u7121\u3057\uff09\n# \u203b -ss \u306e\u4f4d\u7f6e\u3067\u7cbe\u5ea6\u304c\u5909\u308f\u308b\u3002\u6b63\u78ba\u3055\u512a\u5148\u306a\u3089 -ss \u3092 -i \u306e\u5f8c\u308d\u3078\uff08\u305f\u3060\u3057\u9045\u3044\uff09\nffmpeg -y -ss 0.000 -i camA.mp4 -t 60 -c copy camA_sync.mp4\nffmpeg -y -ss 0.183 -i camB.mp4 -t 60 -c copy camB_sync.mp4\n\n# \u3055\u3089\u306b\u30d5\u30ec\u30fc\u30e0\u7cbe\u5ea6\u3092\u512a\u5148\uff08\u518d\u30a8\u30f3\u30b3\u30fc\u30c9\u3059\u308b\uff1a\u7de8\u96c6\u8010\u6027\u306f\u4e0a\u304c\u308b\uff09\nffmpeg -y -ss 0.183 -i camB.mp4 -t 60 -c:v libx264 -crf 18 -preset veryfast -c:a aac -b:a 192k camB_sync_reenc.mp4\n<\/code><\/pre>\n\n<h3>4.2 \u300c\u30d3\u30fc\u30d7\u6642\u523b\u30920\u79d2\u300d\u306b\u6b63\u898f\u5316\u3057\u3066\u304b\u3089\u5207\u308b\uff08\u7ba1\u7406\u304c\u697d\uff09<\/h3>\n<pre><code># beep_time \u3092\u5f15\u3044\u305f\u5730\u70b9\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u30d3\u30fc\u30d7\u306e\u77ac\u9593\u304c\u30bf\u30a4\u30e0\u30e9\u30a4\u30f30\u306b\u306a\u308b\u3088\u3046\u306b\u3059\u308b\n# \u4f8b\uff1acamA beep_time=12.340 \u2192 -ss 12.340\nffmpeg -y -ss 12.340 -i camA.mp4 -c copy camA_beep0.mp4\nffmpeg -y -ss 12.523 -i camB.mp4 -c copy camB_beep0.mp4\nffmpeg -y -ss 12.411 -i camC.mp4 -c copy camC_beep0.mp4\n\n# \u4ee5\u964d\u306f\u5168\u90e8\u300c\u540c\u3058\u6642\u523b\u300d\u3067\u5207\u308c\u3070\u63c3\u3046\nffmpeg -y -ss 5.000 -i camA_beep0.mp4 -t 30 -c copy A_05to35.mp4\nffmpeg -y -ss 5.000 -i camB_beep0.mp4 -t 30 -c copy B_05to35.mp4\n<\/code><\/pre>\n\n<h2>5. \u540c\u671f\u306e\u4fe1\u983c\u6027\u3092\u4e0a\u3052\u308b\u305f\u3081\u306e\u5b9f\u52d9\u30e1\u30e2\uff08\u6c11\u751f\u54c1\u306e\u5236\u7d04\u8fbc\u307f\uff09<\/h2>\n\n<ul>\n  <li><b>\u30d3\u30fc\u30d7\u306f\u77ed\u3059\u304e\u308b\u3068AGC\u306b\u8ca0\u3051\u308b\uff1a<\/b>100\u301c300ms\u304c\u7121\u96e3\u3002<\/li>\n  <li><b>3\u56de\u30d1\u30bf\u30fc\u30f3\u306b\u3059\u308b\uff1a<\/b>\u5358\u767a\u3060\u3068\u62cd\u624b\u30fb\u91d1\u5c5e\u97f3\u3067\u8aa4\u691c\u51fa\u3059\u308b\u3002\u9593\u9694\u306b\u30af\u30bb\u3092\u4ed8\u3051\u308b\u3068\u5f37\u3044\u3002<\/li>\n  <li><b>\u5e2f\u57df\u3092\u56fa\u5b9a\u3059\u308b\uff1a<\/b>2\u301c4kHz\u3067\u691c\u51fa\u3057\u3066\u304a\u3051\u3070\u3001\u9ad8\u57df\u304c\u6b7b\u3093\u3060\u7aef\u672b\u3067\u3082\u52d5\u304f\u3002<\/li>\n  <li><b>\u8ddd\u96e2\u30fb\u5411\u304d\u304c\u30d0\u30e9\u30d0\u30e9\u306a\u3089\u5dee\u52d5\u99c6\u52d5\u3067\u97f3\u5727\u3092\u7a3c\u3050\uff1a<\/b>\u300c\u5165\u3089\u306a\u3044\u30ab\u30e1\u30e9\u300d\u304c\u51fa\u308b\u3068\u5168\u6557\u3002<\/li>\n  <li><b>\u3069\u3046\u3057\u3066\u3082\u97f3\u304c\u4fe1\u7528\u3067\u304d\u306a\u3044\u3068\u304d\uff1a<\/b>LED\u30d5\u30e9\u30c3\u30b7\u30e5\u3092\u6620\u50cf\u306b\u3082\u5165\u308c\u308b\uff08\u6700\u5f8c\u306e\u4fdd\u967a\uff09\u3002<\/li>\n<\/ul>\n\n<div class=\"warn\">\n  <b>\u91cd\u8981\uff1a<\/b>\u300c\u97f3\u5727\uff08dB SPL\u306e\u7d76\u5bfe\u5024\uff09\u300d\u306f\u3001\u6821\u6b63\u30de\u30a4\u30af\/\u6821\u6b63\u5668\u304c\u7121\u3044\u9650\u308a\u771f\u9762\u76ee\u306b\u51fa\u305b\u306a\u3044\u3002<br\/>\n  \u305f\u3060\u3057\u540c\u671f\u76ee\u7684\u306a\u3089\u3001\u5fc5\u8981\u306a\u306e\u306f<b>\u6642\u523b\uff08\u30d4\u30fc\u30af\u306e\u4f4d\u7f6e\uff09<\/b>\u306a\u306e\u3067\u3001\u76f8\u5bfe\u5024\u3067\u5341\u5206\u3002\n<\/div>\n\n<h2>6. \u6b21\u306e\u4e00\u624b\uff08\u3053\u3053\u304b\u3089\u81ea\u52d5\u5316\uff09<\/h2>\n<ul>\n  <li>Python\u5074\u3067\u5404cam.wav\u306ebeep_time\u3092\u307e\u3068\u3081\u3066\u8aad\u307f\u3001\u57fa\u6e96\u3068\u306e\u5dee\u5206\u3092CSV\u306b\u51fa\u3059<\/li>\n  <li>\u305d\u306eCSV\u3092\u5143\u306b\u3001ffmpeg\u30b3\u30de\u30f3\u30c9\u3092\u81ea\u52d5\u751f\u6210\u3057\u3066\u4e00\u62ec\u3067\u540c\u671f\u7248\u52d5\u753b\u3092\u4f5c\u308b<\/li>\n  <li>\u30d3\u30fc\u30d7\u3092\u300c3\u56de\u30d1\u30bf\u30fc\u30f3\u300d\u306b\u3057\u3066\u3001\u691c\u51fa\u30823\u70b9\u306e\u76f8\u95a2\uff08\u30d1\u30bf\u30fc\u30f3\u7167\u5408\uff09\u306b\u3059\u308b\u3068\u8aa4\u691c\u51fa\u304c\u3055\u3089\u306b\u6e1b\u308b<\/li>\n<\/ul>\n\n<p class=\"small\">\n  \u3082\u3057\u300c\u30d3\u30fc\u30d7\u306e\u5468\u6ce2\u6570\u3092\u53ef\u5909\u306b\u3057\u305f\u3044\uff08\u6700\u3082\u5b89\u5b9a\u3059\u308b\u5e2f\u57df\u3092\u73fe\u5834\u3067\u81ea\u52d5\u63a2\u7d22\u3057\u305f\u3044\uff09\u300d\u306a\u3089\u3001<br\/>\n  MCU\u5074\u3067 1.5k\u301c4.5kHz \u3092\u30b9\u30c6\u30c3\u30d7\u3057\u3066\u9cf4\u3089\u3057\u3001\u4e0a\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u300c\u4e00\u756a\u30a8\u30cd\u30eb\u30ae\u30fc\u304c\u5f37\u3044\u5468\u6ce2\u6570\u300d\u3092\u81ea\u52d5\u3067\u6c7a\u3081\u308b\u69cb\u6210\u306b\u3059\u308b\u3068\u5f37\u3044\u304b\u3082\u3002\n<\/p>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>\u30d4\u30a8\u30be\u30d6\u30b6\u30fc\u540c\u671f\uff08\u982d\u51fa\u3057\uff09\u8a2d\u8a08 + \u30d4\u30fc\u30af\u691c\u51fa\u30b9\u30af\u30ea\u30d7\u30c8 + ffmpeg\u3067\u540c\u671f\u70b9\u304b\u3089\u52d5\u753b\u629c\u304d\u51fa\u3057 \u72d9\u3044\uff1a\u8907\u6570\u306e\u6c11\u751f\u30ab\u30e1\u30e9\uff08\u30b9\u30de\u30db\u30fb\u30a2\u30af\u30b7\u30e7\u30f3\u30ab\u30e0\u7b49\uff09\u306e\u9332\u753b\u3092\u3001\u5192\u982d\u306b\u9cf4\u3089\u3057\u305f\u300c\u30d6\u30b6\u30fc\u97f3\u300d\u3092\u57fa\u6e96\u306b\u540c\u671f\u3057\u3001 ffmpeg\u3067\u540c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","vkExUnit_EyeCatch_disable":"","_veu_custom_css":"","veu_display_promotion_alert":"common","vkexunit_cta_each_option":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[59,6],"tags":[27,36],"class_list":["post-1728","post","type-post","status-publish","format-standard","hentry","category-59","category-programing","tag-27","tag-36"],"aioseo_notices":[],"veu_head_title_object":{"title":"","add_site_title":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1728"}],"version-history":[{"count":3,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1728\/revisions"}],"predecessor-version":[{"id":1731,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1728\/revisions\/1731"}],"wp:attachment":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}