FFmpeg
Loading...
Searching...
No Matches
af_whisper.c File Reference
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <whisper.h>
#include "libavutil/avutil.h"
#include "libavutil/opt.h"
#include "libavutil/channel_layout.h"
#include "libavutil/samplefmt.h"
#include "libavfilter/avfilter.h"
#include "libavfilter/audio.h"
#include "libavutil/mem.h"
#include "libavutil/avstring.h"
#include "libavutil/internal.h"
#include "libavformat/avio.h"
#include "libavutil/thread.h"
#include "formats.h"

Go to the source code of this file.

Data Structures

struct  WhisperContext
 

Macros

#define OFFSET(x)
 
#define FLAGS   AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_FILTERING_PARAM
 
#define HOURS   3600000000
 

Functions

static void cb_log (enum ggml_log_level level, const char *text, void *user_data)
 
static int init (AVFilterContext *ctx)
 
static void uninit (AVFilterContext *ctx)
 
static void run_transcription (AVFilterContext *ctx, AVFrame *frame, int samples)
 
static int filter_frame (AVFilterLink *inlink, AVFrame *frame)
 
static int push_last_frame (AVFilterLink *outlink)
 
static int activate (AVFilterContext *ctx)
 
static int query_formats (const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
 

Variables

static const AVOption whisper_options []
 
static const AVClass whisper_class
 
const FFFilter ff_af_whisper
 

Macro Definition Documentation

◆ OFFSET

#define OFFSET ( x)
Value:

Definition at line 456 of file af_whisper.c.

◆ FLAGS

Definition at line 457 of file af_whisper.c.

◆ HOURS

#define HOURS   3600000000

Definition at line 458 of file af_whisper.c.

Function Documentation

◆ cb_log()

static void cb_log ( enum ggml_log_level level,
const char * text,
void * user_data )
static

Definition at line 76 of file af_whisper.c.

Referenced by init().

◆ init()

static int init ( AVFilterContext * ctx)
static

Definition at line 91 of file af_whisper.c.

◆ uninit()

static void uninit ( AVFilterContext * ctx)
static

Definition at line 175 of file af_whisper.c.

◆ run_transcription()

static void run_transcription ( AVFilterContext * ctx,
AVFrame * frame,
int samples )
static

Definition at line 201 of file af_whisper.c.

Referenced by filter_frame(), and push_last_frame().

◆ filter_frame()

static int filter_frame ( AVFilterLink * inlink,
AVFrame * frame )
static

Definition at line 315 of file af_whisper.c.

Referenced by activate().

◆ push_last_frame()

static int push_last_frame ( AVFilterLink * outlink)
static

Definition at line 374 of file af_whisper.c.

Referenced by activate().

◆ activate()

static int activate ( AVFilterContext * ctx)
static

Definition at line 400 of file af_whisper.c.

◆ query_formats()

static int query_formats ( const AVFilterContext * ctx,
AVFilterFormatsConfig ** cfg_in,
AVFilterFormatsConfig ** cfg_out )
static

Definition at line 436 of file af_whisper.c.

Variable Documentation

◆ whisper_options

const AVOption whisper_options[]
static
Initial value:
= {
{ "model", "Path to the whisper.cpp model file", OFFSET(model_path), AV_OPT_TYPE_STRING,.flags = FLAGS },
{ "language", "Language for transcription ('auto' for auto-detect)", OFFSET(language_str), AV_OPT_TYPE_STRING, {.str = "auto"}, .flags = FLAGS },
{ "translate", "Translate from source language to English", OFFSET(translate), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, .flags = FLAGS },
{ "queue", "Audio queue size", OFFSET(queue), AV_OPT_TYPE_DURATION, {.i64 = 3000000}, 20000, HOURS, .flags = FLAGS },
{ "use_gpu", "Use GPU for processing", OFFSET(use_gpu), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, .flags = FLAGS },
{ "gpu_device", "GPU device to use", OFFSET(gpu_device), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, .flags = FLAGS },
{ "destination", "Output destination", OFFSET(destination), AV_OPT_TYPE_STRING, {.str = ""}, .flags = FLAGS },
{ "format", "Output format (text|srt|json)", OFFSET(format), AV_OPT_TYPE_STRING, {.str = "text"},.flags = FLAGS },
{ "max_len", "Max segment length in characters", OFFSET(max_len), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, .flags = FLAGS },
{ "vad_model", "Path to the VAD model file", OFFSET(vad_model_path), AV_OPT_TYPE_STRING,.flags = FLAGS },
{ "vad_threshold", "VAD threshold", OFFSET(vad_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 0.5}, 0.0, 1.0, .flags = FLAGS },
{ "vad_min_speech_duration", "Minimum speech duration for VAD", OFFSET(vad_min_speech_duration), AV_OPT_TYPE_DURATION, {.i64 = 100000}, 20000, HOURS, .flags = FLAGS },
{ "vad_min_silence_duration", "Minimum silence duration for VAD", OFFSET(vad_min_silence_duration), AV_OPT_TYPE_DURATION, {.i64 = 500000}, 0, HOURS, .flags = FLAGS },
{ NULL }
}
static const char *const format[]
Definition af_aiir.c:444
#define HOURS
Definition af_whisper.c:458
#define FLAGS
Definition cmdutils.c:598
#define NULL
Definition coverity.c:32
#define OFFSET(x)
@ AV_OPT_TYPE_DURATION
Underlying C type is int64_t.
Definition opt.h:318
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
Definition opt.h:270
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition opt.h:326
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
Definition opt.h:275

Definition at line 460 of file af_whisper.c.

◆ whisper_class

const AVClass whisper_class
static
Initial value:
= {
.class_name = "whisper",
.item_name = av_default_item_name,
.option = whisper_options,
}
static const AVOption whisper_options[]
Definition af_whisper.c:460
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85

Definition at line 477 of file af_whisper.c.

◆ ff_af_whisper

const FFFilter ff_af_whisper
Initial value:
= {
.p.name = "whisper",
.p.description = NULL_IF_CONFIG_SMALL("Transcribe audio using whisper.cpp."),
.p.priv_class = &whisper_class,
.init = init,
.uninit = uninit,
.activate = activate,
.priv_size = sizeof(WhisperContext),
}
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
Definition aeval.c:246
static const AVClass whisper_class
Definition af_whisper.c:477
const AVFilterPad ff_audio_default_filterpad[1]
An AVFilterPad array whose only entry has name "default" and is of type AVMEDIA_TYPE_AUDIO.
Definition audio.c:34
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AVFILTER_FLAG_METADATA_ONLY
The filter is a "metadata" filter - it does not modify the frame data in any way.
Definition avfilter.h:182
static av_cold void uninit(AVBitStreamFilterContext *ctx)
static int activate(AVBitStreamFilterContext *ctx)
#define FILTER_INPUTS(array)
Definition filters.h:264
#define FILTER_OUTPUTS(array)
Definition filters.h:265
#define FILTER_QUERY_FUNC2(func)
Definition filters.h:241
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88

Definition at line 484 of file af_whisper.c.