App to join all the recorded videos automatically from 1 folder

Can we please have an app that will auto join all videos in 1 folder? I am talking about the videos that are recorded on the SD card, when you have recording set to ON.

I would like to archive some of the footage, but have 1 video for the whole 24 hours (for the day).

Manually doing this takes so so long, can we please have a utility that joins the videos please!!!

2 Likes

I have tried to use ffmpeg unsuccessfully, based on a tutorial i found on youtube.

First to create a list of all the files in the folder:
(for %i in (*.mp4) do @echo file ‘%i’) > mylist.txt

then to join them using:
ffmpeg -f concat -i mylist.txt -c copy all.mp4

However this throws errors.

ffmpeg version N-54707-gaac57c7 Copyright (c) 2000-2013 the FFmpeg developers
built on Jul 13 2013 18:07:04 with gcc 4.7.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 39.100 / 52. 39.100
libavcodec 55. 18.102 / 55. 18.102
libavformat 55. 12.102 / 55. 12.102
libavdevice 55. 3.100 / 55. 3.100
libavfilter 3. 80.101 / 3. 80.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
[concat @ 00000000047cc7c0] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, concat, from ‘mylist.txt’:
Duration: 00:00:00.01, start: 0.000000, bitrate: 830 kb/s
Stream #0:0: Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, s16, 64 kb/s
Stream #0:1: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 766 kb/s, 10 fps, 10 tbr, 90k tbn, 20 tbc
File ‘00all.mp4’ already exists. Overwrite ? [y/N] y
[mp4 @ 0000000004683800] track 1: could not find tag, codec not currently supported in container
Output #0, mp4, to ‘00all.mp4’:
Metadata:
encoder : Lavf55.12.102
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080, q=2-31, 766 kb/s, 10 fps, 90k tbn, 90k tbc
Stream #0:1: Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, 64 kb/s
Stream mapping:
Stream #0:1 → #0:0 (copy)
Stream #0:0 → #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Error number -1 occurred

C:\Users\cpt\Downloads\Baby\20190202\00>ffmpeg -f concat -i mylist.txt -c copy 00all.mp4
ffmpeg version N-93069-g6dc06e979c Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181201
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 46.100 / 58. 46.100
libavformat 58. 26.100 / 58. 26.100
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001f8e5263680] Auto-inserting h264_mp4toannexb bitstream filter
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, concat, from ‘mylist.txt’:
Duration: N/A, start: 0.000000, bitrate: 830 kb/s
Stream #0:0(und): Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, s16, 64 kb/s
Metadata:
creation_time : 2019-02-02T05:00:03.000000Z
Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 766 kb/s, 10 fps, 10 tbr, 90k tbn, 20 tbc
Metadata:
creation_time : 2019-02-02T05:00:03.000000Z
encoder : JVT/AVC Coding
[mp4 @ 000001f8e5830040] Could not find tag for codec pcm_alaw in stream #1, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
Stream #0:1 → #0:0 (copy)
Stream #0:0 → #0:1 (copy)
Last message repeated 1 times

I am very frustrated here, basically these 1 minute recordings are useless if I can’t just join them into 1 hour or 24 hour video. What gives, how hard is it to provide this functionality, having to do this manually takes hours


If you don’t get an answer here, I highly recommend finding a forum that is meant for supporting the ffmpeg utility.

1 Like

Yeah thanks, I was hoping Wyze would say we are working on a small utility that can do that, but fat chance. The 1min videos are a huge PITA if you ever want a video for the day, or for the hour, or part of the day
 very very impractical w/o some app to merge them


I used Windows Movie Maker to join a few clips together. It still had that jerky movement in the first few seconds of each minute, but I think that may be in the original 1 minute clips.

1 Like

For Mac users, after copying the video files from the card to your Mac:

  1. Double click the first file which will open it in Quicktime Player.

  2. Drag and drop the remaining files onto the Quicktime window.

  3. You will see all the clips arranged on the bottom of the window like this:

  1. Close the Quicktime window and save the combined video when asked, or use File > Export.

  2. Go get a cup of coffee
 it may take a while to save the new file. It’s faster if you export at lower resolution. I recommend not trying to do more than an hour at a time.

Bonus hint: when playing back the combined video in Quicktime Player, you can use the K/J keys on the keyboard to rev/ffwd at 2x, 5x, 10x or 30x.

Now if only we had a way to directly download the files from the mSD card without removing the card from the camera. Vote here:

4 Likes

These solutions are exhausting; sure, if you want to join 2 videos, it’s great, if your camera is always recording, and you want to combine the videos so you have a video for each hour of the day, this takes hours and hours to do.

Can we have an option in the app where if recording locally we can set the time it records, like a minute video, or an hour video, etc.

If Wyze provided an option to record to push the video to FTP or NAS with option to record an hour at a time, this would be really great, as it is, it’s highly impractical.

For the record, the two commands work to combine all minute videos to an hour; however this is very manual
 ugh

(for %i in (*.mp4) do @echo file ‘%i’) > mylist.txt
ffmpeg.exe -safe 0 -f concat -i mylist.txt -c copy all.mkv

Note that I am pushing it to MKV, not MP4 container; after a bit of search I found out that it was throwing errors for the following reason: For whatever reason, the encoder (PCM ALAW) that Wyze chose to use for the Audio part is not supported in the mp4 container by ffmpeg.

1 Like

Nice find on the mkv container. I had the same issue but ended up re-encoding the audio, which is a bit slower but still pretty zippy:

ffmpeg -f concat -i files.lst -c:v copy -c:a aac combined.mp4

2 Likes

I’m basically creating a 12hr MKV file of my son in his crib, or moving about.

The only thing I would like to be able to do better, is to have a higher level script (that calls the other stuff), which I can run in a top folder.

like if the folder is called crib and has

\crib\20190417
\crib\20190416
etcc

I want the script to go into each folder, do a lookup of what subfolders are in there, and use that in the script so at the end, the folder crib will have 20190417.mkv, 20190416.mkv, etc


Each week or so I manually dump the mSD card to my laptop and need to spend 1hr+ doing part of this stuff manually


I basically put together the stuff I have so far from code I found doing google searches


If all the playable files are in a folder, you can pass that folder to VLC and it will play them one after another.

1 Like

I could write this for a bash (linux / OS X) environment, but I don’t know windows shell scripting. But I’ll go on.

To combine all videos for a given day across all hour subfolders, you can just create one big list (unless you want the hour-long files too)

for folder in $(ls); do ls $folder/*.mp4; done > today.lst
ffmpeg -f concat -i today.lst -c copy today.mkv

Actually it should work to just ls /.mp4 (again, at least in bash)

ls */*.mp4 > today.lst
ffmpeg -f concat -i today.lst -c copy today.mkv

You can save that as a script to call from another script or just embed it to do this for multiple days. The following is run from the crib folder. Something like this – warning: untested.

for day in $(ls); do
  # don't execute loop if it doesn't look like a day folder
  ls $day/*/*.mp4 || continue
  # skip if we already have this day's file
  [ -f $day.mkv ] && continue
  # concat day into one video
  echo "Compiling $day..."
  ls $day/*/*.mp4 > $day.lst
  ffmpeg -nostats -f concat -i $day.lst -c copy $day.mkv
done
echo "Done"

I use this for joining my Drone videos - and a quick test shows that it seems to work with Wyze files OK

https://www.mp4joiner.org/en/

Thanks for the input, I am not a programmer, the stuff I came up with was using sources I found searching online and trial and error :slight_smile: I am even less familiar with OSx/Linux scripting. I just wish Wyze would create a small app that one could point to a folder in Windows and come up with 1 big MP4/MKV file from whatever subfolders exist.

Yes, you could join files with a number of apps, but they just don’t work when you have over 1,000 files to join. Those programs are great for 4,5, 10 files
 Joining a week’s worth of 1 minute videos is insane to have to do it manually.

I used one of my cams to record 20 hours of video spread over three days of the construction of my backyard patio. After the fact, I decided I wanted to boil down all these videos into one 15-minute time-lapse mp4 video. To accomplish this, I created two Windows command files (concat.cmd and extract.cmd) to automate the process by recursively following the subfolders under c:\record.

You can download the two command files here: https://1drv.ms/u/s!AhtppHlk0VCeoH6NKD6KwZCpLWBV?e=mF7ucW
The files are commented with instructions for use.

You can view the time-lapse video here:
https://1drv.ms/v/s!AhtppHlk0VCeoH0sv9JCpwWzaU1u?e=ETvdhZ

2 Likes

I had good success with the free gopro software editing together pics and video to create time lapse and adding music, ect. - these were images not taken on a gopro - YMMV

https://gopro.com/en/us/shop/softwareandapp/quik-|-desktop/Quik-Desktop.html#

Does that concat command work on let’s say a top level folder 20190920 to create one big MP4 file? Each of the day folders have 24 other subfolders for each hour, and in each of those folders there are 60 mp4 files, for each minute.

Basically I’m looking for a way to run a command so that I get 1 large file named 20190920 from all the movies in the subfolders, in chronological order of course.

Does it do that?

Copy the following text to notepad and save the file as concat2.cmd:

:: this batch command creates one mp4 video from a series of wyzecam videos
:: it requires the Windows version of ‘ffmpeg’ (https://ffmpeg.zeranoe.com/builds/) to be installed
:: unzip the ffmpeg installation file and copy ‘ffmpeg.exe’ to your path
:: copy the ‘record’ folder from the wyze microSD card to your computer as C:\record

:: copy this batch command file (concat2.cmd) to C:\record\2019xxxx
:: be aware that this process is CPU intensive; do not run other applications at the same time

:: open a command Window in C:\record\2019xxxx
:: type concat2 and wait for the process to finish and return to the C:\record>2019xxxx prompt
:: at the conclusion of the process, open output.mp4 in your video player (try VLC: https://www.videolan.org/vlc/index.html)
:: be aware that output.mp4 will be a VERY large file

@echo on
cls

:: create list of mp4 files in c:\record\2019xxx folder tree
(FOR /F “delims=” %%A IN (‘DIR *.mp4 /O:D /B /S’) DO @ECHO file ‘%%A’) > mylist.txt

:: concatenate mp4 files into one mp4 video named output.mp4
ffmpeg -hide_banner -loglevel panic -f concat -safe 0 -i mylist.txt -c copy output.mp4

del mylist.txt

Each one-minute Wyzecam video is approximately 6MB in size. An hourly folder is approximately 360MB. A daily folder is about 8,640MB (8.64GB). A week’s worth is about 60GB. A year’s worth is about 3.15 terabytes.

Unless you’ve got a lot a time on your hands (and disk space) you really don’t need to do this.

Rather than going to the trouble of combining one minute videos, use VLC instead Official download of VLC media player, the best Open Source player - VideoLAN.

For example:

  1. Copy the ‘record’ folder from the wyze microSD card to your computer as C:\record.
  2. Start VLC
  3. Click Media – Open Folder
  4. Navigate to C:\record
  5. Click Select Folder
  6. All of the videos will play in order

If you only want to view a day, simply navigate to that day’s folder and select it. Similarly, if you want to view an hour within a day, navigate to that hour and select it.

3 Likes

Will give this script a shot! Thanks

Thanks for posting this. I tried following your instructions to the letter and I got the following in the command prompt:

ö was unexpected at this time.
C:\record\20191010>(FOR /F ĂŽdelims=ö %A IN (ĂŠDIR *.mp4 /O:D /B /SÆ) DO @ECHO file ĂŠ%AÆ) > mylist.txt
C:\record\20191010>