We have a video conversion process using ffmpeg, for generating low-quality previews of h264 videos. This is partially done on a Raspberry Pi, and then uploaded to a server where some more processing is done.
For testing purposes, I am using a PC (ffmpeg under cygwin) rather than the raspberry pi itself. The end results are identical on both. Currently this process works for a particular set of videos. We are now adding a second video source that this process does not work with. As part of the process, we generate files that are only supposed to have keyframes in: ffmpeg -discard nokey -i split.mp4 -c copy -y keyframes.h264 Output from this command (for a typical representative file): On the raspberry pi: http://0x0.st/zGzL.log On the PC: http://0x0.st/zGz9.log The issue I am having is that this keyframes.h264 file seems to have non-keyframes in it at the start. The original video has a keyframe per second at 25fps. The created keyframe files have the first 20-25 frames of the original video, and then the remaining keyframes. I have determined this by getting ffmpeg to dump the frames from that keyframe file to jpg. This ultimately has the effect of "stretching" the first second of footage to 20-25s when we reconstruct the video. This is because it assumes that each frame in the uploaded video is at 1s intervals. I have omitted the remaining steps from the upload and reconstruction process for clarity. I can provide details of those steps if needed. I have upload example input and output files: 1. Representative input file: http://0x0.st/zGzp.mp4 2. Keyframes h264 file: http://0x0.st/zGzf.h264 If I use: ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv 02-Asplit.mp4 | grep -n I | cut -d ':' -f 1 to get the indexes of the keyframes in the original file, ffprobe certainly thinks that there is 1 every 25 frames: 1 26 51 76 etc... so I am reasonably certain that the original files are OK. For comparison, here are mp4 files and a log from a different source that is correctly converted using the same commands: 1. Representative input file: http://0x0.st/zG-M.mp4 2. Keyframes h264 file: http://0x0.st/zG-g.h264 3. ffmpeg log: http://0x0.st/zG-l.log Basically, my question is how can I correctly produce this "raw" keyframes file from the given input? I hope all the above is clear. Thanks in advance for any assistance! _______________________________________________ ffmpeg-user mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-user To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
