I am trying to mux and then demux an HEVC stream and running into an issue where the reconstructed video is slightly longer than original video.
Using segment muxer, I split video into 6 second segments (video was captured at 6 second IDR intervals so copy filter can work):
ffmpeg -y -r 24 -i input.mp4 -map 0:v:0? -c copy \
-f segment -segment_time 5 -reset_timestamps 1 ./segments/%05d.mp4
Using concat demuxer, I combine video segments (created in step 1) as follows:
PWD=`pwd`
ffmpeg -y -f concat -safe 0 -i <( echo file ${PWD}'/segments/00000.mp4'; \
echo file ${PWD}'/segments/00001.mp4'; echo file ${PWD}'/segments/00002.mp4'; \
echo file ${PWD}'/segments/00003.mp4'; echo file ${PWD}'/segments/00004.mp4'; \
echo file ${PWD}'/segments/00005.mp4'; echo file ${PWD}'/segments/00006.mp4'; \
echo file ${PWD}'/segments/00007.mp4'; echo file ${PWD}'/segments/00008.mp4'; \
echo file ${PWD}'/segments/00009.mp4'; echo file ${PWD}'/segments/00010.mp4'; \
echo file ${PWD}'/segments/00011.mp4'; echo file ${PWD}'/segments/00012.mp4'; \
echo file ${PWD}'/segments/00013.mp4'; echo file ${PWD}'/segments/00014.mp4'; \
echo file ${PWD}'/segments/00015.mp4'; echo file ${PWD}'/segments/00016.mp4'; \
echo file ${PWD}'/segments/00017.mp4'; echo file ${PWD}'/segments/00018.mp4'; \
echo file ${PWD}'/segments/00019.mp4'; echo file ${PWD}'/segments/00020.mp4'; \
echo file ${PWD}'/segments/00021.mp4'; echo file ${PWD}'/segments/00022.mp4'; \
echo file ${PWD}'/segments/00023.mp4'; echo file ${PWD}'/segments/00024.mp4'; \
echo file ${PWD}'/segments/00025.mp4'; echo file ${PWD}'/segments/00026.mp4'; \
echo file ${PWD}'/segments/00027.mp4'; echo file ${PWD}'/segments/00028.mp4'; \
echo file ${PWD}'/segments/00029.mp4'; echo file ${PWD}'/segments/00030.mp4'; \
echo file ${PWD}'/segments/00031.mp4'; echo file ${PWD}'/segments/00032.mp4'; \
echo file ${PWD}'/segments/00033.mp4'; echo file ${PWD}'/segments/00034.mp4'; \
echo file ${PWD}'/segments/00035.mp4'; echo file ${PWD}'/segments/00036.mp4'; \
echo file ${PWD}'/segments/00037.mp4'; ) -map 0 -c copy -r 24 -brand mp42 \
-video_track_timescale 600 -tag:v hvc1 output.mp4
When I run example file on above test, output file is approximately 3 seconds shorter than input file (and has a frame rate of 24.33 as opposed to 24 for original).
Script to reproduce bug, along with sample video file is available here