Skip to content

Cooling off over the week

A drop of temperature down to the mid 20's feels a huge relief. On Sunday it was a nice day and I could have the windows open all day without the house melting.

I have been riding on the hotter days so that when I come home the house is nice and cool.

On Sunday I organised all the pension documents I have gathered over the last 3 decades, much of which is ready for shredding. I amalgamated several pensions into one large one, keeping those pensions already in a sustainable plan.

Entertainment this week involved revisiting many classic movies:

  • Barbarella possibly one of the strangest mainstream Sci-Fi movies ever made. I love the surreal designs in the movie and the extreme quirkiness, along with the innocence of Barbarella character (Jane Fonda).
  • Outland a movie I remember watching with my Dad (now deceased), a tale of a space outpost controlled by greedy corporations with Sean Connery trying to uphold justice against all odds.
  • Morons From Outer Space
  • Saturn 3 British Sci-Fi film from 1980 with Farrah Fowcett, Kirk Douglas & Harvey Keitel, a tranquil hydroponics research station is disturbed by a disturbed visitor and his equally strange robot.
  • First Men in the Moon a British film from 1964 based on the H.G. Wells book of the same name. Stop-motion animation by Ray Harryhausen. A film I have a fond memory for.
  • Crack In The World
  • Krull

Practicalliλ︎

I am reworking the Makefile tasks in practicalli/dotfiles, updating the documentation generation tasks to use Zensical (rather than Material for MkDocs).

I wondered if a Makefile could be separated into different files, to make task definitions modular (potentially avoiding some redundancy in task definitions).

include filename in a Makefile will include the task defined in the filename file. It was reported that imported tasks do not show up in autocompletion, making this approach less friendly to use.

Cyclingλ︎

Sleepy in Collier St on Tuesday started at a steady pace, got a little faster after the Kent Alps.

The weather was cloudy until I started to return, when the sun came out along with a headwind. The return part of the route was slower and I was struggling with motivation, but focusing on my breath helped keep me going.

GPSλ︎

I generated an overlay video using GPStitch.

The resultant video was at a frame rate of 30 frames per second. The camera I record the rides with generated video at 25 frames per second.

When adding the overlay to the video I edit in Blender, the video tracks are not the same length due to the difference in frame rate.

I have been exploring the options available for GPStitch and how to convert a video to 25 frames per second using ffmpeg

Video editingλ︎

Convert a generated overlay video to 25 frames per second can be done using the -r frame rate option.

ffmpeg -i original-video.mp4 -r 25 2025-10-30_overlay-25fps.mp4

Changing frame rate of a video can be problematic if the new frames per second (FPS) value doesn’t align with the key frames of the original video.

Key frames are frames which store the full image information. A mismatch can cause quality loss, particularly in complex videos.

Use the -vf (video filter) option with the fps filter to ensure a smooth transition without altering keyframes.

Change frame rate without altering key frame structure

ffmpeg -i input_video.mp4 -vf "fps=25" output_video.mp4

Use the -c copy option to avoid the re-encoding when generating the new video, help preserve the video and audio quality in the new video.

The -c copy option doesn’t modify the existing frames or the codec used in the video, making it a useful choice for lossless framerate change.

The -c copy option can only be used if the frame rate change is compatible with the video format and codec:

Change Frame rate to 25 and maintain the original video encoding

ffmpeg -i input_video.mp4 -r 25 -c copy output_video.mp4

Videos may use a variable frame rate (VFR) for flexibility when streaming. A video with constant frame rate (CFR) can be less complicated when editing.

Use the -vsync option to convert VFR to CFR without re-encoding the video stream.

Convert Variable frame rate to Consistent frame rate

ffmpeg -i input.mp4 -r 30 -vsync cfr output.mp4
FFMpeg Help
❯ ffmpeg --help
ffmpeg version 7.1.5-0+deb13u1 Copyright (c) 2000-2026 the FFmpeg developers
  built with gcc 14 (Debian 14.2.0-19)
  configuration: --prefix=/usr --extra-version=0+deb13u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-libmfx --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.101 / 61. 19.101
  libavformat    61.  7.103 / 61.  7.103
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  5.100 / 10.  5.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
Universal media converter
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Getting help:
    -h      -- print basic options
    -h long -- print more options
    -h full -- print all options (including all format and codec specific options, very long)
    -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol
    See man ffmpeg for detailed description of the options.

Per-stream options can be followed by :<stream_spec> to apply that option to specific streams only. <stream_spec> can be a stream index, or v/a/s for video/audio/subtitle (see manual for full syntax).

Print help / information / capabilities:
-L                  show license
-h <topic>          show help
-version            show version
-muxers             show available muxers
-demuxers           show available demuxers
-devices            show available devices
-decoders           show available decoders
-encoders           show available encoders
-filters            show available filters
-pix_fmts           show available pixel formats
-layouts            show standard channel layouts
-sample_fmts        show available audio sample formats

Global options (affect whole program instead of just one file):
-v <loglevel>       set logging level
-y                  overwrite output files
-n                  never overwrite output files
-stats              print progress report during encoding

Per-file options (input and output):
-f <fmt>            force container format (auto-detected otherwise)
-t <duration>       stop transcoding after specified duration
-to <time_stop>     stop transcoding after specified time is reached
-ss <time_off>      start transcoding at specified time


Per-file options (output-only):
-metadata[:<spec>] <key=value>  add metadata

Per-stream options:
-c[:<stream_spec>] <codec>  select encoder/decoder ('copy' to copy stream without reencoding)
-filter[:<stream_spec>] <filter_graph>  apply specified filters to audio/video

Video options:
-r[:<stream_spec>] <rate>  override input framerate/convert to given output framerate (Hz value, fraction or abbreviation)
-aspect[:<stream_spec>] <aspect>  set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-vn                 disable video
-vcodec <codec>     alias for -c:v (select encoder/decoder for video streams)
-vf <filter_graph>  alias for -filter:v (apply filters to video streams)
-b <bitrate>        video bitrate (please use -b:v)

Audio options:
-aq <quality>       set audio quality (codec-specific)
-ar[:<stream_spec>] <rate>  set audio sampling rate (in Hz)
-ac[:<stream_spec>] <channels>  set number of audio channels
-an                 disable audio
-acodec <codec>     alias for -c:a (select encoder/decoder for audio streams)
-ab <bitrate>       alias for -b:a (select bitrate for audio streams)
-af <filter_graph>  alias for -filter:a (apply filters to audio streams)

Subtitle options:
-sn                 disable subtitle
-scodec <codec>     alias for -c:s (select encoder/decoder for subtitle streams)

Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social

0173760b (feat(post): journal week starting 13 July 2026)