Skip to content

Use ffmpeg to combine an image file with an audio recording to produce a .mov file

Notifications You must be signed in to change notification settings

richb-hanover/FFMPEG-ImagePlusAudio

Repository files navigation

Using ffmpeg to massage image, audio, and video

I regularly record public meetings in my town and post them on Youtube. This allows residents who could not attend the meeting in person to see what occurred. It also supports creation of accurate minutes.

I like to add a label (showing the committee name and date) and a timecode (a running clock showing the current time in the meeting). I found a free program Shutter Encoder that does this. It works well, but has a detailed (very fussy) user interface that requires a long set of steps for every new video.

Since I only deal with a couple variations of the recordings, I decided to write scripts that use the ffmpeg program directly to accomplish these repeated, well-defined tasks.

I now move the video/audio files into this directory and issue a command like the one below, and wait a few minutes. The resulting video is ready for uploading to Youtube.

sh ./AddTimecode.sh "Lyme Committee Meeting-6Feb2024" 09:58:00

Here are the notes I use to remind myself how to make the videos using my Mac. This information and the resulting scripts are also available on my github repo.

NB: You may need to install the ffmpeg program. Download a pre-built binary from ffmpeg.org, or read more on that site for getting a version for your computer.

This note is also posted to my RandomNeuronsFiring blog.

Add image, label, and timecode to an audio track

To convert an audio-only recording into a video suitable for uploading to Youtube, this script combines a static JPEG photo with an audio track. The repo contains a photo of the Lyme Town Offices which is used by default. To use the script:

  1. Open the audio .mp4 file with QuickTime Player, and use the Trim (Cmd-T) function to remove the dead air from the start and end of the recording, as necessary. Save as Meeting Name_ddMMMyyyy.mp4

  2. Move the resulting audio file to this folder and run this script, where hh:mm:ss is the actual start time of the recording:

    sh AddTimestamp.sh "Meeting Name and Date" hh:mm:ss

    The script looks for a .mp4 file (and the image of Town Offices) to produce an output file named Meeting Name and Date-timecoded.mov

  3. Cleanup: Move the original audio file and the resulting ...-timecoded.mov file to the CompletedFiles folder so they won't interfere with subsequent runs. Discard after they have been uploaded

Add label and timecode to AVCHD files

A Panasonic HDC-TM80 video camera produces a AVCHD meta-file that contains the video from a recording session. The files in an AVCHD file are within the AVCHD/BDMV/STREAM directory with filenames 00000.MTS, 00001.MTS, etc.

Drag the AVCHD file into this folder and run this script:

sh ./TimecodeAVCHD.sh "Meeting Name and Date" hh:mm:ss

The script looks for a file named AVCHD and outputs file named MeetingName-timecoded.mov

Add label and timecode to Zoom video recordings

Sometimes, a meeting is recorded by an Owl Camera. This results in a good video with good audio, but it's still helpful to display the meeting name and timecode at the bottom.

Drag the Zoom file (a .mp4 file) into this folder and run this script:

sh ./TimecodeZoom.sh "Meeting Name and Date" hh:mm:ss

The script looks for any file with a .mp4 extension and outputs file named MeetingName-timecoded.mov

Add label and timecode to Sony Handycam recordings

This script looks for a MP_ROOT directory and timecodes it. It customizes the position of the label and timecode. NB: The Sony Handycam's 32GByte internal memory produces about 30.7 GBytes of data for 7h20m of video at standard resolution.

sh ./TimecodeMP_ROOT.sh "Meeting Name and Date" hh:mm:ss

Background Information

Copy files/folders to another host

scp -r folder-name user@ip-address:destination-directory
# Specifics
scp -r AVCHD-xxxxx account@192.168.1.1:/Users/account/github/FFMPEG-ImagePlusAudio

References used to create the ffmpeg commands

StackOverflow/SuperUser and similar sites are your friends.

So is ChatGPT. I gave it this initial prompt, "give me a ffmpeg command to read a .mts file and add a label and a timecode and output a .mov file. Be sure the audio of the .mts file is preserved." and iterated to get the final commands.

Experiments with ffmpeg

From: https://superuser.com/questions/1041816/combine-one-image-one-audio-file-to-make-one-video-using-ffmpeg

  1. Accepted answer: ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest out.mp4

    ffmpeg -loop 1 -i Lyme-Town-Hall-Offices-cropped-1024.jpeg -i SB-20231130.mp4 -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest 11Nov2023-first.mp4

    Takes a while to encode

  2. PJBrunet and Kokizzu: ffmpeg -r 1 -loop 1 -y -i 1.jpg -i 1.m4a -c:a copy -r 1 -vcodec libx264 -shortest 1.avi

    time ffmpeg -r 1 -loop 1 -y -i Lyme-Town-Hall-Offices-cropped-1024.jpeg -i SB-20231130.mp4 -c:a copy -r 1 -vcodec libx264 -shortest 11Nov2023-second.mp4

    ~5 seconds; result 18.6mbytes. Creates file that cannot be opened by QuickTime Player

  3. Same as #2 with image that has odd number of pixels

    ffmpeg -r 1 -loop 1 -y -i Lyme-Town-Hall-Offices-cropped-1024-1.jpeg -i SB-20231130.mp4 -c:a copy -r 1 -vcodec libx264 -shortest 11Nov2023-three.mp4

    Blows big chunks with "odd dimensions" error

  4. Same as #2 with odd number of pixels, using -pix_fmt yuv444p right before name of output file.

    time ffmpeg -r 1 -loop 1 -y -i Lyme-Town-Hall-Offices-cropped-1024-1.jpeg -i SB-20231130.mp4 -c:a copy -r 1 -vcodec libx264 -shortest -pix_fmt yuv444p 11Nov2023-four.mp4

    Fast (takes 5-10seconds). Creates file that cannot be opened by QuickTime Player

About

Use ffmpeg to combine an image file with an audio recording to produce a .mov file

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages