Over the past few weeks, I've taken to recording my Squash games using my Gopro to understand areas of improvement. The video is recorded at 1080p and 60fps, however Gopro splits the video into several large sized mp4 files.
I wanted to combine them together into a single file and re-encoded to reduce the file size significantly and
ffmpeg came to rescue.
First order is to combine the files.
ffmpeg accepts input text file with each line consisting of the object type (
file in this case) and the file name. Alternatively it also accepts
http and a
url as a line item as well.
$ ls *.MP4 | perl -ne 'print "file $_"' > input.txt $ cat input.txt file GOPR4466.MP4 file GP014466.MP4
To reduce file size one can do several things. The easiest is to set the
crf flag which indicates "Constant Rate Factor" or the quality of encoding with values ranging from
0 indicates lossless encoding and
51 the opposite. The default value is
$ ffmpeg -f concat -i input.txt -c:v libx264 -crf 28 output.txt
$ ls *.MP4 | perl -ne 'print "file $_"' | ffmpeg -safe 0 -protocol_whitelist "file,pipe" -crf 28 -f concat -i - output.mp4