tl;dr: Well, it’s cheating because it’s not ‘rescuing’ what isn’t recorded, just retrieving and appending
Last night I played a few rounds of some cooperative gameplay with some good friends, and as usual I recorded the session for posterity.
However, when looking over the file created, neither VLC nor
ffmpeg could determine a duration. I used
ffmpeg to create a new file (
ffmpeg -i old.mkv -c copy new.mkv), and when it got to about the 1 hour 50 minute mark in the stream copy, it printed the following error:
invalid return value 0 for stream protocol
[matroska,webm @ 0x55eb60b609c0] Read error
Invalid return value 0 for stream protocol
It’s possible that I ran out of space during recording, so it behoves me to make sure my disks are more clear — hopefully the process of migrating to a combined fileserver will help there! — before I start recording.
Fortunately, I also stream to Twitch and so I could create a ‘highlight’ of the latter part of gameplay- about 45 minutes’ worth. The quality isn’t as good (max bitrate 3500kbit), but it’s better than nothing. So that it can be seamlessly appended, I decided to upscale the size from 720p to 1080p using
$ ffmpeg -i ~/downloads/211006613-69819912-48eb80ad-009f-42d5-83aa-f68dda7b7612.mp4 -vf scale=1920x1080:flags=lanczos
-c:a copy -crf 20 -preset slow ~/mounts/storage/video/2017-12-19\ 22-04-59b.mkv
frame=105361 fps= 24 q=28.0 size= 2402802kB time=00:29:16.20 bitrate=11208.1kbits/s speed=0.408x
(Conversion in progress! Using
-vf scale=1920x1080:flags=lanczos to scale and
-crf 20 to ensure quality stays reasonable)
After that, it should be a simple matter of using the
concat demuxer, assuming the files are similar enough (both are pixel format
yuvj420p)– I previously had issues when trying to create an auto-highlighter/clip creator that minimised re-encoding.