[FFmpeg-devel] [PATCH] libavformat/keyframes: output keyframe indexes
Jonathan Viney
jonathan.viney at gmail.com
Mon May 4 14:09:51 CEST 2015
Hi,
Thanks for the feedback. After having another look, this can actually
already be done with ffprobe. I was incorrectly using -show_frames
instead of -show_packets, causing a big performance hit.
This works well, with the same performance:
ffprobe -show_packets -print_format compact input.mkv | grep -n
flags=K | cut -f1 -d:
Thanks,
-Jonathan.
On Mon, May 4, 2015 at 11:01 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> On Mon, May 04, 2015 at 02:35:45AM +1200, Jonathan Viney wrote:
>> Hi,
>>
>> First patch here. I wrote this format to be able to get the keyframe
>> indexes faster than seemed possible with ffprobe, and also to get more
>> familiar with ffmpeg.
>>
>> ffmpeg -i input.mkv -c copy -f keyframes -keyframes_filename keyframes.txt
>> /dev/null
>>
>> Could something like this be included in ffmpeg? Or is this already
>> achievable with the current code?
>
> iam a bit undecided if this is a good idea but
>
> why is this faster than ffprobe ? or rather why is ffprobe slow ?
>
> [...]
>> +
>> +#include "avformat.h"
>> +#include "libavutil/opt.h"
>> +
>> +typedef struct {
>> + const AVClass *class;
>> + int frame_count;
>> + char *filename;
>> + FILE *file;
>> +} KeyFramesContext;
>> +
>> +av_cold static int kf_init(AVFormatContext *s)
>> +{
>> + KeyFramesContext *kf = s->priv_data;
>> +
>> + kf->file = fopen(kf->filename, "w");
>
> this should use the io context like any other muxer not bypass it
> with fopen/f*...
>
>
>> +
>> + if (kf->file) {
>> + av_log(s, AV_LOG_ERROR, "failed opening key frames file: %s\n",
>> kf->filename);
>> + return -1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static int kf_write_packet(struct AVFormatContext *s, AVPacket *pkt)
>> +{
>> + KeyFramesContext *kf = s->priv_data;
>> +
>> + if (pkt->flags & AV_PKT_FLAG_KEY) {
>> + av_log(s, AV_LOG_DEBUG, "key frame at index %d\n",
>> kf->frame_count);
>
> patch is corrupted by linebreaks
>
> [...]
> --
> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> He who knows, does not speak. He who speaks, does not know. -- Lao Tsu
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list