Convert Insta360 .insp files to equirectangular projection on Ubuntu with FFmpeg

While writing the blog post on AI-realistic photos, I wanted to include one of my 360-degree photos. In the past, I have done this by embedding code snippets from commercial services. However, those tend to disappear or move, so I wanted to check (again) if I can do it natively on my own server instead. And, lo and behold, now, in 2025, it is finally possible to do this easily with regular web tools! ...

December 19, 2025 · 4 min · 837 words · ARJ

Converting Ambisonics files to Binaural audio

Ambisonics is a full-sphere surround sound format that captures audio from all directions using spherical harmonics. To convert it to binaural audio for headphone listening, you need to apply Head-Related Transfer Functions (HRTFs), mathematical models that simulate how sound waves interact with the human head and ears. HRTFs create the spatial cues necessary to perceive 3D sound direction and distance over stereo headphones. My favourite go-to-tool for converting media files, FFmpeg, unfortunately lacks native binaural rendering. However, it offers channel manipulation filters like amerge, channelmap, and pan. These provide basic channel operations but won’t produce true binaural audio. Here are some tips for how to make it work. ...

October 9, 2023 · 1 min · 199 words · ARJ

Understanding the GoPro Max' File Formats

I use a GoPro Max 360-degree camera in my annual #StillStanding project. That means that I also have had an excellent chance to work with GoPro files and try to understand their inner logic. In this blog post, I will summarize some of my findings. What is recorded? Recording “a video” with a GoPro Max results in recording multiple files. For example, each of my daily 10-minute recordings ends up with something like this: ...

May 25, 2023 · 9 min · 1901 words · ARJ

Remove GoPro Flickering

I use a GoPro Max 360-degree camera for my daily Still Standing recordings. Unfortunately, I discovered too late that the camera’s default 60fps setting can cause flickering issues with certain indoor lighting here in Norway, where our electrical system operates at 25 Hz. Fortunately, I found a solution to remove flickering due to artificial light using my favourite terminal tool FFmpeg. The technique works by averaging pixel values between the original frame and a slightly delayed copy, smoothing out flicker from artificial lighting. ...

February 22, 2023 · 1 min · 205 words · ARJ

Add fade-in and fade-out programmatically with FFmpeg

There is always a need to add fade-in and fade-out to audio tracks. Here is a way of doing it for a bunch of video files. It may come in handy with the audio normalization script I have shown previously. That script is based on continuously normalizing the audio, which may result in some noise in the beginning and end (because there is little/no sound in those parts, hence they are normalized more). ...

August 9, 2022 · 2 min · 285 words · ARJ

Removing audio hum using a highpass filter in FFmpeg

Today, I recorded Sound Action 194 - Rolling Dice as part of my year-long sound action project. The idea has been to do as little processing as possible to the recordings. That is because I want to capture sounds and actions as naturally as possible. The recorded files will also serve as source material for both scientific and artistic explorations later. For that reason, I only trim the recordings non-destructively using FFmpeg. ...

July 13, 2022 · 2 min · 303 words · ARJ

Adding subtitles to videos

In my ever-growing collection of FFmpeg-related blog posts, I will today show how to add subtitles to videos. These tricks are based on the need to create a captioned version of a video I made to introduce the Workshop on NIME Archiving for the 2022 edition of the International Conference on New Interfaces for Musical Expression (NIME). This is the video I discuss in this blog post: Note that YouTube supports turning on and off the subtitles (CC button). ...

June 11, 2022 · 6 min · 1193 words · ARJ

Edit video rotation metadata in FFmpeg

I am recording a lot of short videos these days for my sound actions project. Sometimes the recordings end up being rotated, which is based on the orientation sensor (probably the gyroscope) of my mobile phone. This rotation is not part of the recorded video data, it is just information written into the header of the MPEG file. That also means that it is possible to change the rotation without recoding the file. It is possible to see the rotation by looking at the metadata of a file: ...

February 12, 2022 · 1 min · 157 words · ARJ

Preparing videos for FutureLearn courses

This week we started up our new online course, Motion Capture: The Art of Studying Human Activity, and we are also rerunning Music Moves: Why Does Music Make You Move? for the seventh time. Most of the material for these courses is premade, but we record a new wrap-up video at the end of each week. This makes it possible to answer questions that have been posed during the week and add some new and relevant material. ...

January 28, 2022 · 2 min · 376 words · ARJ
Frame differencing image of dancer.

Frame differencing with FFmpeg

I often want to create motion videos, that is, videos that only show what changed between frames. Such videos are nice to look at, and so-called “frame differencing” is also the start point for many computer vision algorithms. We have made several tools for creating motion videos (and more) at the University of Oslo: the standalone VideoAnalysis app (Win/Mac) and the different versions of the Musical Gestures Toolbox. These are all great tools, but sometimes it would be nice also to create motion videos in the terminal using FFmpeg. ...

January 9, 2022 · 2 min · 246 words · ARJ