{"id":97,"date":"2025-09-02T14:56:46","date_gmt":"2025-09-02T14:56:46","guid":{"rendered":"https:\/\/scootercam.net\/notes\/?p=97"},"modified":"2025-09-02T14:56:46","modified_gmt":"2025-09-02T14:56:46","slug":"live-video","status":"publish","type":"post","link":"https:\/\/scootercam.net\/blog\/live-video\/","title":{"rendered":"&#8220;Live&#8221; video"},"content":{"rendered":"\n<p>it&#8217;s not &#8220;live,&#8221; exactly, but this system captures video and audio for Scootercam<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Reolink On-Demand Video Capture<\/h1>\n\n\n\n<p>A Python script for capturing 10-second live video clips with audio from Reolink IP cameras. Designed for on-demand use cases like motion detection triggers, security alerts, or manual surveillance recording.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Overview<\/h2>\n\n\n\n<p>This script connects to a Reolink camera via RTSP stream, records 10 seconds of live video with audio, processes it into a web-optimized MP4 file, and automatically uploads it to an FTP server. Perfect for security systems, wildlife monitoring, or any scenario requiring quick video capture.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Features<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Live RTSP Capture<\/strong>: Records directly from camera&#8217;s live video stream<\/li>\n\n\n\n<li><strong>Audio Recording<\/strong>: Captures synchronized audio along with video<\/li>\n\n\n\n<li><strong>Automatic Processing<\/strong>: Converts to web-optimized MP4 format<\/li>\n\n\n\n<li><strong>FTP Upload<\/strong>: Automatically uploads to remote server<\/li>\n\n\n\n<li><strong>Error Handling<\/strong>: Comprehensive connectivity and validation checks<\/li>\n\n\n\n<li><strong>File Management<\/strong>: Automatic cleanup of temporary and old files<\/li>\n\n\n\n<li><strong>Fast Execution<\/strong>: Typical runtime 15-20 seconds total<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Requirements<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hardware<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Raspberry Pi or Linux system with network access to camera<\/li>\n\n\n\n<li>Reolink IP camera with RTSP stream support<\/li>\n\n\n\n<li>Internet connection for FTP uploads<\/li>\n\n\n\n<li>Minimum 500MB free disk space<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Software Dependencies<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python 3.6+<\/li>\n\n\n\n<li>ffmpeg<\/li>\n\n\n\n<li>curl<\/li>\n\n\n\n<li>ping utility<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Install System Dependencies<\/h3>\n\n\n\n<p><strong>Raspberry Pi\/Debian\/Ubuntu:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install python3 ffmpeg curl iputils-ping<\/code><\/pre>\n\n\n\n<p><strong>CentOS\/RHEL:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo yum install python3 ffmpeg curl iputils<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Download Script<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/your-repo\/reolink_video_capture.py\n<em># or<\/em>\ncurl -O https:\/\/your-repo\/reolink_video_capture.py<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Make Executable<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x reolink_video_capture.py<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Create Output Directory<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/var\/www\/html\/mp\nsudo chown $USER:$USER \/var\/www\/html\/mp<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Camera Settings<\/h3>\n\n\n\n<p>Edit the script variables at the top:<\/p>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Reolink Camera Configuration<\/em>\nREOLINK_USER = \"admin\"\nREOLINK_PASS = \"your_camera_password\"\nREOLINK_IP = \"192.168.1.211\"\nREOLINK_PORT = \"554\"\n\n<em># FTP Server Configuration  <\/em>\nFTP_USER = \"your_ftp_username\"\nFTP_PASS = \"your_ftp_password\"\nFTP_HOST = \"your_ftp_server\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Security Configuration (Recommended)<\/h3>\n\n\n\n<p><strong>Option 1: Environment Variables<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Add to ~\/.bashrc or ~\/.profile<\/em>\nexport REOLINK_PASS=\"your_camera_password\"\nexport FTP_PASS=\"your_ftp_password\"\n\n<em># Modify script to use:<\/em>\nREOLINK_PASS = os.environ.get('REOLINK_PASS', 'default_password')\nFTP_PASS = os.environ.get('FTP_PASS', 'default_password')<\/code><\/pre>\n\n\n\n<p><strong>Option 2: Config File<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Create ~\/.camera_config.py<\/em>\nREOLINK_PASS = \"your_camera_password\"\nFTP_PASS = \"your_ftp_password\"\n\n<em># Import in main script:<\/em>\ntry:\n    from camera_config import *\nexcept ImportError:\n    pass  <em># Use defaults<\/em><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Camera RTSP URL Formats<\/h3>\n\n\n\n<p>Different Reolink models use various RTSP paths. The script defaults to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rtsp:\/\/user:pass@ip:554\/h264Preview_01_main<\/code><\/pre>\n\n\n\n<p><strong>If this doesn&#8217;t work, try these alternatives:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Stream TypeRTSP PathMain Stream (High Quality)<code>\/h264Preview_01_main<\/code>Sub Stream (Lower Quality)<code>\/h264Preview_01_sub<\/code>Alternative Main<code>\/Preview_01_main<\/code>Simple Path<code>\/live<\/code><\/pre>\n\n\n\n<p><strong>Test your RTSP URL manually:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ffmpeg -i \"rtsp:\/\/admin:password@192.168.1.211:554\/h264Preview_01_main\" -t 5 test.mp4<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Usage<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Basic Usage<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 reolink_video_capture.py<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Command Line Integration<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Add to PATH for easy access<\/em>\nsudo cp reolink_video_capture.py \/usr\/local\/bin\/capture-video\nsudo chmod +x \/usr\/local\/bin\/capture-video\n\n<em># Run from anywhere:<\/em>\ncapture-video<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Integration Examples<\/h3>\n\n\n\n<p><strong>Motion Detection Trigger:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Add to motion detection script<\/em>\nif motion_detected; then\n    python3 \/path\/to\/reolink_video_capture.py\n    notify_admin \"Motion detected - video captured\"\nfi<\/code><\/pre>\n\n\n\n<p><strong>Cron Job for Regular Captures:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Every hour during business hours<\/em>\n0 9-17 * * 1-5 \/usr\/bin\/python3 \/home\/pi\/reolink_video_capture.py\n\n<em># Daily at midnight<\/em>\n0 0 * * * \/usr\/bin\/python3 \/home\/pi\/reolink_video_capture.py<\/code><\/pre>\n\n\n\n<p><strong>Web Interface Button:<\/strong><\/p>\n\n\n\n<p>html<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&lt;!-- Simple web button --&gt;<\/em>\n&lt;button onclick=\"fetch('\/cgi-bin\/capture-video.py')\"&gt;Capture Video&lt;\/button&gt;<\/code><\/pre>\n\n\n\n<p><strong>Home Assistant Integration:<\/strong><\/p>\n\n\n\n<p>yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># configuration.yaml<\/em>\nshell_command:\n  reolink_capture: \"python3 \/home\/pi\/reolink_video_capture.py\"\n\n<em># Use in automations or scripts<\/em>\n- service: shell_command.reolink_capture<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">File Output<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Local Storage<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Temporary files<\/strong>:\u00a0<code>\/tmp\/reolink_capture_TIMESTAMP.mp4<\/code><\/li>\n\n\n\n<li><strong>Final files<\/strong>:\u00a0<code>\/var\/www\/html\/mp\/live_TIMESTAMP.mp4<\/code><\/li>\n\n\n\n<li><strong>Naming format<\/strong>:\u00a0<code>live_YYYYMMDDHHMMSS.mp4<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Remote Storage<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FTP location<\/strong>:\u00a0<code>ftp:\/\/server\/live\/live_TIMESTAMP.mp4<\/code><\/li>\n\n\n\n<li><strong>Web accessible<\/strong>: Depends on your FTP server configuration<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example Filenames<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>live_20240315143022.mp4  # March 15, 2024 at 2:30:22 PM\nlive_20240315143055.mp4  # March 15, 2024 at 2:30:55 PM<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Video Specifications<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Duration<\/strong>: 10 seconds<\/li>\n\n\n\n<li><strong>Resolution<\/strong>: 1280&#215;720 (720p)<\/li>\n\n\n\n<li><strong>Video Codec<\/strong>: H.264<\/li>\n\n\n\n<li><strong>Audio Codec<\/strong>: AAC at 128 kbps<\/li>\n\n\n\n<li><strong>Quality<\/strong>: CRF 23 (high quality)<\/li>\n\n\n\n<li><strong>Frame Rate<\/strong>: Camera&#8217;s native rate (usually 15-30 fps)<\/li>\n\n\n\n<li><strong>File Size<\/strong>: Typically 2-8 MB depending on scene complexity<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Monitoring &amp; Logs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Real-time Monitoring<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Monitor script execution<\/em>\npython3 reolink_video_capture.py\n\n<em># Watch output directory<\/em>\nwatch ls -la \/var\/www\/html\/mp\/live_*.mp4<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Log Output Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;2024-03-15 14:30:22] === Starting on-demand Reolink video capture ===\n&#91;2024-03-15 14:30:22] Checking camera connectivity...\n&#91;2024-03-15 14:30:23] Camera is reachable\n&#91;2024-03-15 14:30:23] Starting 10-second video capture...\n&#91;2024-03-15 14:30:35] Video capture completed successfully\n&#91;2024-03-15 14:30:35] Video file created: live_20240315143022.mp4 (3248576 bytes)\n&#91;2024-03-15 14:30:35] Uploading live_20240315143022.mp4 to FTP server...\n&#91;2024-03-15 14:30:38] Upload successful: live_20240315143022.mp4\n&#91;2024-03-15 14:30:38] Cleanup completed\n&#91;2024-03-15 14:30:38] === On-demand capture completed ===<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Common Issues<\/h3>\n\n\n\n<p><strong>&#8220;Camera is not reachable&#8221;<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify IP address and network connectivity<\/li>\n\n\n\n<li>Check camera power and network connection<\/li>\n\n\n\n<li>Test:\u00a0<code>ping 192.168.1.211<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>&#8220;ffmpeg failed&#8221; or RTSP connection errors<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify camera credentials<\/li>\n\n\n\n<li>Check RTSP port (554) isn&#8217;t blocked<\/li>\n\n\n\n<li>Try alternative RTSP paths (see configuration section)<\/li>\n\n\n\n<li>Test manually:\u00a0<code>ffmpeg -i \"rtsp:\/\/user:pass@ip:554\/h264Preview_01_main\" -t 5 test.mp4<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>&#8220;Video file too small&#8221; or corrupt videos<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Camera may not support audio &#8211; try video-only capture<\/li>\n\n\n\n<li>Network bandwidth issues during capture<\/li>\n\n\n\n<li>Try lower quality settings:\u00a0<code>-crf 28<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Upload failures<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify FTP server credentials and accessibility<\/li>\n\n\n\n<li>Check internet connectivity<\/li>\n\n\n\n<li>Test manual upload:\u00a0<code>curl -T test.mp4 ftp:\/\/server\/ --user user:pass<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Permission errors<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Fix directory permissions<\/em>\nsudo chown -R $USER:$USER \/var\/www\/html\/mp\/\nsudo chmod 755 \/var\/www\/html\/mp\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Debug Mode<\/h3>\n\n\n\n<p><strong>Enable verbose ffmpeg output:<\/strong><\/p>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Remove 'capture_output=True' and add '-v verbose'<\/em>\nffmpeg_cmd = &#91;\n    'ffmpeg', '-v', 'verbose',\n    <em># ... rest of command<\/em>\n]\nresult = subprocess.run(ffmpeg_cmd, timeout=30)<\/code><\/pre>\n\n\n\n<p><strong>Test RTSP stream:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Test if stream is accessible<\/em>\nffprobe \"rtsp:\/\/admin:password@192.168.1.211:554\/h264Preview_01_main\"\n\n<em># Test 5-second capture<\/em>\nffmpeg -i \"rtsp:\/\/admin:password@192.168.1.211:554\/h264Preview_01_main\" -t 5 test.mp4<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Customization<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Capture Duration<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'-t', '15',  <em># Change from 10 to 15 seconds<\/em><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Video Quality<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Higher quality (larger files):<\/em>\n'-crf', '18',\n\n<em># Lower quality (smaller files):<\/em>\n'-crf', '28',\n\n<em># Different resolution:<\/em>\n'-vf', 'scale=1920x1080:flags=lanczos',  <em># 1080p<\/em>\n'-vf', 'scale=640x480:flags=lanczos',    <em># 480p<\/em><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Audio-Only or Video-Only<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Video only (no audio):<\/em>\n'-an',  <em># Add this flag<\/em>\n\n<em># Audio only:<\/em>\n'-vn',  <em># Add this flag<\/em><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Different Upload Locations<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Different FTP directory<\/em>\nf'ftp:\/\/{FTP_HOST}\/live\/'       <em># Current default<\/em>\nf'ftp:\/\/{FTP_HOST}\/ss\/'         <em># Timelapse directory<\/em>\nf'ftp:\/\/{FTP_HOST}\/security\/'   <em># For security alerts  <\/em>\nf'ftp:\/\/{FTP_HOST}\/alerts\/'     <em># For motion alerts<\/em>\nf'ftp:\/\/{FTP_HOST}\/manual\/'     <em># For manual captures<\/em><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Integration Patterns<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Motion Detection System<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n<em># motion-alert.sh<\/em>\necho \"Motion detected at $(date)\"\npython3 \/home\/pi\/reolink_video_capture.py\nnotify-send \"Security Alert\" \"Motion detected - video captured\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Web API Endpoint<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Simple Flask app<\/em>\nfrom flask import Flask\nimport subprocess\n\napp = Flask(__name__)\n\n@app.route('\/capture')\ndef capture_video():\n    result = subprocess.run(&#91;'python3', 'reolink_video_capture.py'])\n    return f\"Capture {'successful' if result.returncode == 0 else 'failed'}\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Scheduled Captures with Variation<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Random captures during business hours<\/em>\n*\/15 9-17 * * 1-5 &#91; $((RANDOM % 4)) -eq 0 ] &amp;&amp; python3 \/home\/pi\/reolink_video_capture.py<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Performance Notes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Typical execution time<\/strong>: 15-20 seconds<\/li>\n\n\n\n<li><strong>Network usage<\/strong>: ~3-8 MB download + upload<\/li>\n\n\n\n<li><strong>CPU usage<\/strong>: Moderate during ffmpeg processing<\/li>\n\n\n\n<li><strong>Disk usage<\/strong>: ~2-8 MB per video file<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Security Considerations<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep camera and FTP credentials secure<\/li>\n\n\n\n<li>Consider using HTTPS\/FTPS for uploads if available<\/li>\n\n\n\n<li>Regularly rotate passwords<\/li>\n\n\n\n<li>Monitor for unauthorized access attempts<\/li>\n\n\n\n<li>Use network segmentation for camera traffic<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Compatibility<\/h2>\n\n\n\n<p><strong>Tested With:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reolink RLC-410, RLC-520, RLC-810A series<\/li>\n\n\n\n<li>Raspberry Pi 3B+, 4B<\/li>\n\n\n\n<li>Ubuntu 20.04+, Raspberry Pi OS<\/li>\n<\/ul>\n\n\n\n<p><strong>Known Issues:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Some older Reolink models may require different RTSP paths<\/li>\n\n\n\n<li>Audio capture may not work on all camera models<\/li>\n\n\n\n<li>Very old firmware may have RTSP authentication issues<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Advanced Usage<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Batch Capture<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Modify main() to capture multiple clips<\/em>\nfor i in range(5):\n    video_file = capture_video()\n    time.sleep(30)  <em># 30-second intervals<\/em><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Quality Profiles<\/h3>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Add command line arguments for different quality presets<\/em>\nimport argparse\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--quality', choices=&#91;'low', 'medium', 'high'], default='medium')<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Integration with Existing Timelapse System<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Add to your dual camera timelapse script<\/em>\nif motion_detected; then\n    python3 reolink_video_capture.py\nfi<\/code><\/pre>\n\n\n\n<p>This script complements your existing timelapse system perfectly &#8211; use the timelapse for long-term monitoring and this script for immediate incident recording!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>it&#8217;s not &#8220;live,&#8221; exactly, but this system captures video and audio for Scootercam Reolink On-Demand Video Capture A Python script for capturing 10-second live video clips with audio from Reolink IP cameras. Designed for on-demand use cases like motion detection triggers, security alerts, or manual surveillance recording. Overview This script connects to a Reolink camera &#8230; <a title=\"&#8220;Live&#8221; video\" class=\"read-more\" href=\"https:\/\/scootercam.net\/blog\/live-video\/\" aria-label=\"Read more about &#8220;Live&#8221; video\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":1,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":98,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/97\/revisions\/98"}],"wp:attachment":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}