Live video on the AT Protocol
1#!/bin/bash
2
3# Generates a video with a sine wave that loops 60 times for testing the segmenter and whatnot
4
5set -euo pipefail
6
7DURATION="${DURATION:-60}"
8WIDTH="${WIDTH:-1280}"
9HEIGHT="${HEIGHT:-720}"
10HALF_HEIGHT=$((HEIGHT / 2))
11
12ffmpeg -y \
13 -f lavfi -i "aevalsrc=0.125 * sin(2 * PI * (150+(800*mod(t\,1))) * mod(t\,1)):sample_rate=48000" \
14 -filter_complex "
15 color=c=green:s=${WIDTH}x${HALF_HEIGHT}:r=60:d=${DURATION},format=yuv420p[green];
16 color=c=blue:s=${WIDTH}x${HALF_HEIGHT}:r=60:d=${DURATION},format=yuv420p[blue];
17 [green][blue]overlay=x='mod(((n-1)/60),1)*(overlay_w+(overlay_w/60)+1)'[colorfade];
18 [0:a]asplit[audio][audio2];
19 [audio2]showwaves=split_channels=1:s=${WIDTH}x${HALF_HEIGHT}:rate=25,fps=60[waveform];
20 [colorfade][waveform]vstack[video];
21 " \
22 -map "[video]" \
23 -map "[audio]" \
24 -c:v libx264 \
25 -preset ultrafast \
26 -g 60 \
27 -keyint_min 60 \
28 -x264-params "keyint=60:scenecut=0:bframes=0" \
29 -crf 23 \
30 -c:a libopus \
31 -b:a 128k \
32 -t "${DURATION}" \
33 output_looped.mp4
34
35ffplay output_looped.mp4