Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdd note on syncing audio and video - adamsgaard.dk - my academic webpage
git clone git://src.adamsgaard.dk/adamsgaard.dk
Log
Files
Refs
README
LICENSE
---
commit dd1fafe054a5b921d85668cb7a09a05eafe4bbe3
parent 5b74834ab0d5bb546c96734bf5fa36c6b2c7353b
Author: Anders Damsgaard <[email protected]>
Date: Tue, 17 Mar 2020 12:36:24 +0100
Add note on syncing audio and video
Diffstat:
M pages/004-screencasts.html | 20 ++++++++++++++++++++
M pages/004-screencasts.txt | 81 +++++++++++++++++++----------…
2 files changed, 70 insertions(+), 31 deletions(-)
---
diff --git a/pages/004-screencasts.html b/pages/004-screencasts.html
t@@ -96,6 +96,26 @@ for f in "$@"; do
done
</code></pre>
+<p>If there is a delay between video and audio, this can also be
+adjusted using ffmpeg(1). I correct for a 0.3 s delay that I
+encounter when recording on my laptop:</p>
+
+<pre><code>#!/bin/sh
+
+synchronize() {
+ ffmpeg -y -i "$1" \
+ -itsoffset 0.300 \
+ -i "$1" \
+ -map 0:v -map 1:a \
+ -c copy \
+ "${1%.*}_out.${1##*.}"
+}
+
+for f in "$@"; do
+ synchronize "$f"
+done
+</code></pre>
+
<figure class="pagefigure">
<video poster="video/screencast.jpg" style="object-fit:fill;"
controls preload="none" class="mediaframe">
diff --git a/pages/004-screencasts.txt b/pages/004-screencasts.txt
t@@ -19,37 +19,37 @@ script serves the purpose of starting and stopping recordi…
lockfile=/tmp/screenrecord.pid
startrecording() {
- out="$HOME/screenrecord-$(date '+%Y-%m-%d_%H:%M:%S').mkv"
- ffmpeg -y \
- -f x11grab \
- -framerate 60 \
- -s "$(xdpyinfo | grep dimensions | awk '{print $2}')" \
- -i $DISPLAY \
- -f sndio -i default \
- -r 30 \
- -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
- "$out" >/dev/null 2>&1 &
- printf '%s' "$!" > "$lockfile"
-
- sleep 1
- if [ ! -f "$out" ]; then
- echo 'error: ffmpeg recording did not start' >&2
- notify-send -u CRITICAL "${0##*/}" 'ffmpeg recording did not s…
- rm -f "$lockfile"
- exit 1
- fi
+ out="$HOME/screenrecord-$(date '+%Y-%m-%d_%H:%M:%S').mkv"
+ ffmpeg -y \
+ -f x11grab \
+ -framerate 60 \
+ -s "$(xdpyinfo | grep dimensions | awk '{print $2}')" \
+ -i $DISPLAY \
+ -f sndio -i default \
+ -r 30 \
+ -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
+ "$out" >/dev/null 2>&1 &
+ printf '%s' "$!" > "$lockfile"
+
+ sleep 1
+ if [ ! -f "$out" ]; then
+ echo 'error: ffmpeg recording did not start' >&2
+ notify-send -u CRITICAL "${0##*/}" 'ffmpeg recording did not s…
+ rm -f "$lockfile"
+ exit 1
+ fi
}
stoprecording() {
- kill "$(cat "$lockfile")"
- rm -f "$lockfile"
- notify-send "${0##*/}" 'recording ended'
+ kill "$(cat "$lockfile")"
+ rm -f "$lockfile"
+ notify-send "${0##*/}" 'recording ended'
}
if [ -f "$lockfile" ]; then
- stoprecording
+ stoprecording
else
- startrecording
+ startrecording
fi
On Linux systems, the sound driver sndio should be replaced by alsa
t@@ -63,9 +63,9 @@ command. The following script toggles the video feed:
#!/bin/sh
# remember to `chown $USER /dev/video0`
if pgrep video >/dev/null 2>&1; then
- pkill video
+ pkill video
else
- nohup video -s 320 >/dev/null 2>&1 &
+ nohup video -s 320 >/dev/null 2>&1 &
fi
On Linux, the command mpv /dev/video0 can take place of the video(1)
t@@ -80,14 +80,33 @@ concievable loss in quality:
#!/bin/sh
encode() {
- ffmpeg -y -i "$1" \
- -c:v libx264 -threads 0 -preset faster -pix_fmt yuv420p \
- -c:a aac -crf 10 \
- "${1%.*}_out.mp4"
+ ffmpeg -y -i "$1" \
+ -c:v libx264 -threads 0 -preset faster -pix_fmt yuv420p \
+ -c:a aac -crf 10 \
+ "${1%.*}_out.mp4"
}
for f in "$@"; do
- encode "$f"
+ encode "$f"
+done
+
+If there is a delay between video and audio, this can also be
+adjusted using ffmpeg(1). I correct for a 0.3 s delay that I
+encounter when recording on my laptop:
+
+#!/bin/sh
+
+synchronize() {
+ ffmpeg -y -i "$1" \
+ -itsoffset 0.300 \
+ -i "$1" \
+ -map 0:v -map 1:a \
+ -c copy \
+ "${1%.*}_out.${1##*.}"
+}
+
+for f in "$@"; do
+ synchronize "$f"
done
[3]Example screen recording using ffmpeg(1) and video(1) with the
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.