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 revisionBoth sides next revision
public:ffmpeg-based_interval_timer_for_sport_and_exercise [2018/02/07 02:44] – [Example output] fangfufupublic:ffmpeg-based_interval_timer_for_sport_and_exercise [2018/02/09 18:06] fangfufu
Line 12: Line 12:
 <code bash> <code bash>
 #!/bin/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 # The file number counter
 let counter=0 let counter=0
 +
 +# The length of the set
 +let setLen=${#turbo[@]}-1
  
 function cleanup { function cleanup {
-    rm seg-*.mp4 filelist.txt+    rm seg-*.mp4 filelist.txt intro.txt
 } }
  
-# Calling convention: duration, font size, text+# Calling convention: duration, font_size
 function introduction { function introduction {
-    ffmpeg -f lavfi -i color=c=white:size=1280x720:rate=30 +    ffmpeg -f lavfi -i color=c=white:size=${resolution}:rate=${framerate} 
-    -vf "drawtext=text='${3}': fontsize=${2}:+    -vf "drawtext=textfile=intro.txt: fontsize=${2}:
-    r=30: x=(w-tw)/2: y=h-h*0.9: fontcolor=black:"+    r=${framerate}: x=(w-tw)/2: y=h-h*0.9: fontcolor=black:"
-    -t ${1} -preset slow -tune stillimage -y \+    -t ${1} -preset ultrafast -tune stillimage -y -loglevel panic -stats \
     seg-${counter}.mp4     seg-${counter}.mp4
     echo "file seg-${counter}.mp4" >> filelist.txt     echo "file seg-${counter}.mp4" >> filelist.txt
Line 31: Line 100:
 } }
  
-# Calling convention: durationtext +# Calling convention: minsec, text_now, text_next 
-function segment +function videoSegment 
-    let min=$1/60 +    let duration=${1}*60+${2} 
-    let sec=$1-${min}*60 +    min=${1
-    ffmpeg -f lavfi -i color=c=white:size=1280x720:rate=30 +    sec=${2} 
-    -vf "drawtext=text='${2}': fontsize=80:+    textNow=${3} 
-    r=30: x=(w-tw)/2: y=h-h*0.75: fontcolor=black:,\+    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: \     drawtext=text='Duration: ${min} min ${sec} sec': fontsize=80: \
-    r=30: x=(w-tw)/2: y=h-h*0.5: fontcolor=black:,+    r=${framerate}: x=(w-tw)*0.5: y=h-h*0.60: fontcolor=Black:, 
 +    \
     drawtext=timecode='00\:00\:00\:00': fontsize=80: \     drawtext=timecode='00\:00\:00\:00': fontsize=80: \
-    r=30: x=(w-tw)/2: y=h-h*0.25: fontcolor=black:" \ +    r=${framerate}: x=(w-tw)*0.5: y=h-h*0.40: fontcolor=Black:, \ 
-    -t ${1} -preset slow -tune stillimage -y \+    \ 
 +    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     seg-${counter}.mp4
     echo "file seg-${counter}.mp4" >> filelist.txt     echo "file seg-${counter}.mp4" >> filelist.txt
Line 53: Line 132:
 } }
  
 +# 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 cleanup
-############################################################################ 
-# -- Insert your session introduction here --                              # 
-# Make sure the font is big enough! You might want to test out the         # 
-# introduction generation first by commenting out the main set             # 
-# Calling convention:                                                      # 
-# introduction $DURATION $FONTSIZE $TEXT                                   # 
-############################################################################ 
-introduction 10 40 " 
-Threshold session: 
  
-W/U - 5 minutes easy, gradually build up +# Create the introduction text variable 
-10 mins at 10 mile TT effort +printf "%s\n" "${turbo[@]}" > intro.txt 
-15 seconds sprint + 
-10 mins easy +# introduction 10 40
-10 mins at 10 mile TT effort +
-20 seconds sprint +
-10 mins easy +
-10 mins 10 mile TT effort +
-25 seconds sprint +
-Warm down for 5 mins, easy spinning +
-"+
  
-############################################################################ +read -p "Press any key to continue, or Ctrl+C to stop..."
--- Insert your main set here--                                         # +
-# You might want to test out the introduction generation before generating # +
-# these video                                                            # +
-# Calling convention:                                                      # +
-# segment $DURATION $TEXT                                                  # +
-############################################################################+
  
-segment 300 "Easy, gradually build up" +for i in $(seq 0 $setLen); do 
-segment 600 "10 mile TT effort" +    turboSegment ${i} 
-segment 15  "Sprint" +done
-segment 600 "Easy" +
-segment 600 "10 mile TT effort" +
-segment 20  "Sprint" +
-segment 600 "Easy" +
-segment 600 "10 mile TT effort" +
-segment 25  "Sprint" +
-segment 300 "Cool down"+
  
-output UEA-Triathlon-2018-02-07.mp4+output UEA-Triathlon-$(date --rfc-3339=date).mp4
 </code> </code>
  
public/ffmpeg-based_interval_timer_for_sport_and_exercise.txt · Last modified: 2018/03/31 00:38 by 127.0.0.1