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
public:ffmpeg-based_interval_timer_for_sport_and_exercise [2018/02/09 18:06] fangfufupublic:ffmpeg-based_interval_timer_for_sport_and_exercise [2018/03/31 00:38] (current) – external edit 127.0.0.1
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