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
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:19] fangfufu
Line 12: Line 12:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
 +# Copyright <2017> <Fufu Fang>
 +
 +# Permission is hereby granted, free of charge, to any person obtaining a copy 
 +# of this software and associated documentation files (the "Software"), to deal 
 +# in  the Software without restriction, including without limitation the rights 
 +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
 +# copies of the Software, and to permit persons to whom the Software is 
 +# furnished to do so, subject to the following conditions:
 +
 +# The above copyright notice and this permission notice shall be included in all 
 +# copies or substantial portions of the Software.
 +
 +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
 +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
 +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
 +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
 +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
 +# SOFTWARE.
 +
 +# 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 -f 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 119:
 } }
  
-# 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 -${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 151:
 } }
  
 +# 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 nextSeg=${1}+1
 +    nextLine=$(echo ${turbo[${nextSeg}]}|tr ':' 'm')
 +    videoSegment $min $sec "${textNow}" "${nextLine}"
 +}
 +################################################################################
 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