User Tools

Site Tools


public:ffmpeg-based_interval_timer_for_sport_and_exercise

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
public:ffmpeg-based_interval_timer_for_sport_and_exercise [2018/02/09 18:06] fangfufupublic:ffmpeg-based_interval_timer_for_sport_and_exercise [2018/02/15 10:30] fangfufu
Line 5: Line 5:
  
 After digging through FFmpeg documentation [(https://trac.ffmpeg.org/wiki)] and the Internet, I figured out how to generate a text-based video.  After digging through FFmpeg documentation [(https://trac.ffmpeg.org/wiki)] and the Internet, I figured out how to generate a text-based video. 
- 
-Here I present the program listing, and an example output. The script works fine on Debian Stretch.  
  
 I have to say FFmpeg is one of my most abused software. Last time I used FFmpeg to upload arbitrary file to Youtube [(https://github.com/fangfufu/Matlab-Data-Video-Converter)].   I have to say FFmpeg is one of my most abused software. Last time I used FFmpeg to upload arbitrary file to Youtube [(https://github.com/fangfufu/Matlab-Data-Video-Converter)].  
-===== Program listing ===== 
-<code bash> 
-#!/bin/bash 
- 
-# The content of the set 
-# Format: 
-# min:sec text 
-turbo=( 
-#Warm up 
-'05:00 90 RPM Smooth pedalling' 
-'02:00 95 RPM Smooth pedalling' 
-'02:00 100 RPM Smooth pedalling' 
-'02:00 105 RPM Smooth pedalling' 
-'01:30 110 RPM Smooth pedalling' 
-'00:30 120-130 RPM Maintain form' 
-'02:00 90 RPM Relax and recover' 
-'00:06 MAX RPM Rev out' 
-'01:00 90 RPM Smooth pedalling' 
-'00:06 MAX RPM Rev out' 
-'01:00 90 RPM Smooth pedalling' 
-'00:06 MAX RPM Rev out' 
-'02:45 90 RPM Relax and recover' 
-#Russian Steps 
-'00:15 Max effort' 
-'00:45 Recovery' 
-'00:30 Max effort' 
-'00:30 Recovery' 
-'00:45 Max effort' 
-'00:15 Recovery' 
-'01:00 Max effort' 
-'01:00 Recovery' 
-'00:45 Max effort' 
-'00:15 Recovery' 
-'00:30 Max effort' 
-'00:30 Recovery' 
-'00:15 Max effort' 
-'05:45 Recovery' 
-'00:15 Max effort' 
-'00:45 Recovery' 
-'00:30 Max effort' 
-'00:30 Recovery' 
-'00:45 Max effort' 
-'00:15 Recovery' 
-'01:00 Max effort' 
-'01:00 Recovery' 
-'00:45 Max effort' 
-'00:15 Recovery' 
-'00:30 Max effort' 
-'00:30 Recovery' 
-'00:15 Max effort' 
-'05:45 Recovery' 
-'00:15 Max effort' 
-'00:45 Recovery' 
-'00:30 Max effort' 
-'00:30 Recovery' 
-'00:45 Max effort' 
-'00:15 Recovery' 
-'01:00 Max effort' 
-'01:00 Recovery' 
-'00:45 Max effort' 
-'00:15 Recovery' 
-'00:30 Max effort' 
-'00:30 Recovery' 
-'00:15 Max effort' 
-'10:00 Cool Down' 
-) 
-################################################################################ 
-resolution=1280x720 
-framerate=30 
- 
-# The file number counter 
-let counter=0 
- 
-# The length of the set 
-let setLen=${#turbo[@]}-1 
- 
-function cleanup { 
-    rm seg-*.mp4 filelist.txt intro.txt 
-} 
- 
-# Calling convention: duration, font_size 
-function introduction { 
-    ffmpeg -f lavfi -i color=c=white:size=${resolution}:rate=${framerate} \ 
-    -vf "drawtext=textfile=intro.txt: fontsize=${2}: \ 
-    r=${framerate}: x=(w-tw)/2: y=h-h*0.9: fontcolor=black:" \ 
-    -t ${1} -preset ultrafast -tune stillimage -y -loglevel panic -stats \ 
-    seg-${counter}.mp4 
-    echo "file seg-${counter}.mp4" >> filelist.txt 
-    let counter++ 
-} 
- 
-# Calling convention: min, sec, text_now, text_next 
-function videoSegment { 
-    let duration=${1}*60+${2} 
-    min=${1} 
-    sec=${2} 
-    textNow=${3} 
-    textNext=$(echo "Next -" ${min}m ${sec}s ${4}) 
-    ffmpeg -f lavfi -i color=c=white:size=${resolution}:rate=${framerate} \ 
-    -vf "\ 
-    drawtext=text='${textNow}': fontsize=80: \ 
-    r=${framerate}: x=(w-tw)*0.5: y=h-h*0.80: fontcolor=Black:,\ 
-    \ 
-    drawtext=text='Duration: ${min} min ${sec} sec': fontsize=80: \ 
-    r=${framerate}: x=(w-tw)*0.5: y=h-h*0.60: fontcolor=Black:, 
-    \ 
-    drawtext=timecode='00\:00\:00\:00': fontsize=80: \ 
-    r=${framerate}: x=(w-tw)*0.5: y=h-h*0.40: fontcolor=Black:, \ 
-    \ 
-    drawtext=text='${textNext}': fontsize=50: \ 
-    r=${framerate}: x=(w-tw)*0.5: y=h-h*0.20: fontcolor=SlateGray:" \ 
-    \ 
-    -t ${duration} -preset ultrafast -tune stillimage -y -loglevel panic -stats \ 
-    seg-${counter}.mp4 
-    echo "file seg-${counter}.mp4" >> filelist.txt 
-    let counter++ 
-} 
- 
-function output { 
-    ffmpeg -f concat -i filelist.txt -c copy -y ${1} 
-    cleanup 
-} 
- 
-# Calling convention: segment_id 
-function turboSegment { 
-    thisLine=$(echo ${turbo[${1}]}) 
-    timing=$(echo $thisLine|cut -d ' ' -f 1) 
-    min=$(echo $timing|cut -d ':' -f 1) 
-    sec=$(echo $timing|cut -d ':' -f 2) 
-    textNow=$(echo $thisLine|cut -d ' ' -f 2-) 
- 
-    let segNext=${1}+1 
-    textNext=$(echo ${turbo[${segNext}]}|cut -d ' ' -f 2-) 
-    videoSegment $min $sec "$textNow" "$textNext" 
-} 
-################################################################################ 
-cleanup 
- 
-# Create the introduction text variable 
-printf "%s\n" "${turbo[@]}" > intro.txt 
- 
-# introduction 10 40 
- 
-# read -p "Press any key to continue, or Ctrl+C to stop..." 
- 
-for i in $(seq 0 $setLen); do 
-    turboSegment ${i} 
-done 
  
-output UEA-Triathlon-$(date --rfc-3339=date).mp4 +You can download it at [[https://github.com/fangfufu/make_interval_timer_video]].
-</code>+
  
 ===== Example output ===== ===== Example output =====
public/ffmpeg-based_interval_timer_for_sport_and_exercise.txt · Last modified: 2018/03/31 00:38 by 127.0.0.1