ffmpeg \
-f lavfi -i "sine=frequency=1000:duration=120" \
-f lavfi \
-i testsrc=duration=5:size=1280x720:rate=24 \
-t 120 \
-map 0:0 \
-map 1:0 \
# Define the P/Invoke signatures | |
Add-Type @" | |
using System; | |
using System.Runtime.InteropServices; | |
using System.Text; | |
public class WindowTools { | |
[StructLayout(LayoutKind.Sequential)] | |
public struct RECT { | |
public int Left; |
#!/usr/bin/env bash | |
ROKU_IP="192.168.1.167" | |
ROKU_USER="rokudev" | |
ROKU_PASSWORD="XXXXXXX" | |
APP_FOLDER="app" | |
DEST_FOLDER="dist" | |
timestamp=$(date +%s) | |
zipfile="../$DEST_FOLDER/rokuapp-$timestamp.zip" |
#!/bin/bash | |
wget "https://nodejs.org/dist/v20.9.0/node-v20.9.0-linux-arm64.tar.xz" | |
tar -xf node-v20.9.0-linux-arm64.tar.xz | |
cd node-v20.9.0-linux-arm64 | |
sudo cp -R bin include lib share /usr/local/ | |
node -v | |
npm -v |
#!/bin/bash | |
ffprobe \ | |
-v error \ | |
-select_streams v \ | |
-show_entries frame=pict_type,pts_time \ | |
-of csv=p=0 \ | |
-skip_frame nokey \ | |
$INPUT_FILE > iframes.txt |
#!/bin/bash | |
packager \ | |
'in=./tmp/output_540p.mp4,stream=video,init_segment=./tmp/output/video_3000_0/video_init.mp4,segment_template=./tmp/output/video_3000_0/video_$Number$.m4s' \ | |
'in=./tmp/output_720p.mp4,stream=video,init_segment=./tmp/output/video_1700_1/video_init.mp4,segment_template=./tmp/output/video_1700_1/video_$Number$.m4s' \ | |
'in=./tmp/output_1080p.mp4,stream=video,init_segment=./tmp/output/video_1200_2/video_init.mp4,segment_template=./tmp/output/video_1200_2/video_$Number$.m4s' \ | |
'in=./tmp/output_audio_128.mp4,stream=audio,language=en,roles=main,hls_name=main_en_2,init_segment=./tmp/output/audio_96_2/audio_init.mp4,segment_template=./tmp/output/audio_96_2/audio_$Number$.m4s' \ | |
'in=./tmp/output_audio_196.mp4,stream=audio,language=en,roles=main,hls_name=main_en_3,init_segment=./tmp/output/audio_64_3/audio_init.mp4,segment_template=./tmp/output/audio_64_3/audio_$Number$.m4s' \ | |
--fragment_duration 6 \ | |
--segment_duration 6 \ |
#!/bin/bash | |
BUILD_ID=$(date +"%s") | |
SRC_DIR="MyApp" | |
ZIP_FILE="dist/devbuild_$BUILD_ID.zip" | |
ROKU_URL="http://192.168.1.167" | |
ROKU_DEV_USER="rokudev" | |
ROKU_DEV_PW="******" |
#!/bin/sh | |
ffmpeg \ | |
-i "http://relay.publicdomainradio.org/classical.mp3" \ | |
-f lavfi \ | |
-re \ | |
-i testsrc=duration=120:size=1280x720:rate=24 \ | |
-map 0:0 \ | |
-map 1:0 \ | |
-c:v libx264 \ |
Some notes on getting Debian 10 (stable) installed and running on the Beelink U57 Mini PC with Intel Core i5-5257u Processor.
Create a bootable USB Flash drive of the Debian 10 netinst ISO using Etcher.
- Download ISO from Debian: https://www.debian.org/distrib/netinst
- Flash to SD Card using Balena Etcher https://www.balena.io/etcher/
- Connect ethernet cable to Beelink
Note: The firmware needed to use the Beelink's onboard Intel Wifi is proprietary, and is not included with the default install of Debian. If you don't have the option of a wired LAN connection you can use an "unofficial" Debian CD image, that includes the proprietary (non-free) firmware. (https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/) See the below section on installing the firmware later on.
- Immediately after startup press the
Del
key to enter the BIOS.
Basic ffmpeg scene detection:
ffmpeg -i input.flv -filter:v "select='gt(scene,0.4)',showinfo" -f null -
scene (video only) value between 0 and 1 to indicate a new scene; a low value reflects a low probability for the current frame to introduce a new scene, while a higher value means the current frame is more likely to be one (see the example below) https://ffmpeg.org/ffmpeg-filters.html#select_002c-aselect
Set the scene change detection threshold as a percentage of maximum change on the luma plane. Good values are in the [8.0, 14.0] range. Scene change detection is only relevant in case combmatch=sc. The range for scthresh is [0.0, 100.0].