Skip to content

Commit a6ac175

Browse files
committed
parakeet : add pkgconfig support
This commit add missing pkgconfig support for parakeet. I've verified that these changes allow for parakeet.cpp to be integrated with ffmpeg (making similar changes that exist for the whisper.cpp filter): ```console ./ffmpeg -i /Users/danbev/work/ai/whisper-work/samples/jfk.wav -af parakeet=model=/Users/danbev/work/ai/whisper-work/models/ggml-parakeet-tdt-0.6b-v3.bin:destination=- -f null - ffmpeg version git-2026-04-01-e64a1d2 Copyright (c) 2000-2026 the FFmpeg developers built with Apple clang version 17.0.0 (clang-1700.3.19.1) configuration: --prefix=/usr --enable-version3 --disable-shared --enable-gpl --enable-nonfree --enable-static --enable-pthreads --enable-filters --enable-openssl --enable-runtime-cpudetect --enable-libvpx --enable-libx264 --enable-libx265 --enable-libspeex --enable-libfreetype --enable-fontconfig --enable-libzimg --enable-libvorbis --enable-libwebp --enable-libfribidi --enable-libharfbuzz --enable-libass --enable-whisper --enable-parakeet libavutil 60. 29.100 / 60. 29.100 libavcodec 62. 29.101 / 62. 29.101 libavformat 62. 13.101 / 62. 13.101 libavdevice 62. 4.100 / 62. 4.100 libavfilter 11. 15.101 / 11. 15.101 libswscale 9. 7.100 / 9. 7.100 libswresample 6. 4.100 / 6. 4.100 [aist#0:0/pcm_s16le @ 0x11e7062c0] Guessed Channel Layout: mono Input #0, wav, from '/Users/danbev/work/ai/whisper-work/samples/jfk.wav': Metadata: encoder : Lavf59.27.100 Duration: 00:00:11.00, bitrate: 256 kb/s Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s Initializing parakeet filter... load_backend: loaded BLAS backend from /Users/danbev/work/ai/whisper-work/build-install/lib/libggml-blas.so ggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices ggml_metal_library_init: using embedded metal library ggml_metal_library_init: loaded in 0.007 sec ggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s) ggml_metal_device_init: GPU name: MTL0 ggml_metal_device_init: GPU family: MTLGPUFamilyApple9 (1009) ggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003) ggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001) ggml_metal_device_init: simdgroup reduction = true ggml_metal_device_init: simdgroup matrix mul. = true ggml_metal_device_init: has unified memory = true ggml_metal_device_init: has bfloat = true ggml_metal_device_init: has tensor = false ggml_metal_device_init: use residency sets = true ggml_metal_device_init: use shared buffers = true ggml_metal_device_init: recommendedMaxWorkingSetSize = 17179.89 MB load_backend: loaded MTL backend from /Users/danbev/work/ai/whisper-work/build-install/lib/libggml-metal.so load_backend: loaded CPU backend from /Users/danbev/work/ai/whisper-work/build-install/lib/libggml-cpu.so [Parsed_parakeet_0 @ 0x600000b883c0] Parakeet filter initialized: model: /Users/danbev/work/ai/whisper-work/models/ggml-parakeet-tdt-0.6b-v3.bin queue: 30000 ms Stream mapping: Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help Initializing parakeet filter... [Parsed_parakeet_0 @ 0x600000b84480] Parakeet filter initialized: model: /Users/danbev/work/ai/whisper-work/models/ggml-parakeet-tdt-0.6b-v3.bin queue: 30000 ms Output #0, null, to 'pipe:': Metadata: encoder : Lavf62.13.101 Stream #0:0: Audio: pcm_s16le, 16000 Hz, 1 channels, s16, 256 kb/s Metadata: encoder : Lavc62.29.101 pcm_s16le [Parsed_parakeet_0 @ 0x600000b84480] run transcription at 0 ms, 176000/176000 samples (11.00 seconds)... And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country. [out#0/null @ 0x600000b88180] video:0KiB audio:344KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown size=N/A time=00:00:11.00 bitrate=N/A speed=7.08x elapsed=0:00:01.55 ```
1 parent 699c055 commit a6ac175

4 files changed

Lines changed: 76 additions & 3 deletions

File tree

CMakeLists.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,16 @@ set(WHISPER_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location
179179
get_directory_property(WHISPER_TRANSIENT_DEFINES COMPILE_DEFINITIONS)
180180

181181
set_target_properties(whisper PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/whisper.h)
182+
182183
install(TARGETS whisper LIBRARY PUBLIC_HEADER)
183184

184185
target_compile_definitions(whisper PRIVATE
185186
WHISPER_VERSION="${PROJECT_VERSION}"
186187
)
187188

189+
set_target_properties(parakeet PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/parakeet.h)
190+
install(TARGETS parakeet LIBRARY PUBLIC_HEADER)
191+
188192
target_compile_definitions(parakeet PRIVATE
189193
PARAKEET_VERSION="${PROJECT_VERSION}"
190194
)
@@ -214,6 +218,35 @@ configure_file(cmake/whisper.pc.in
214218
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/whisper.pc"
215219
DESTINATION lib/pkgconfig)
216220

221+
set(PARAKEET_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files")
222+
set(PARAKEET_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files")
223+
set(PARAKEET_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files")
224+
225+
configure_package_config_file(
226+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/parakeet-config.cmake.in
227+
${CMAKE_CURRENT_BINARY_DIR}/parakeet-config.cmake
228+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/parakeet
229+
PATH_VARS
230+
PARAKEET_INCLUDE_INSTALL_DIR
231+
PARAKEET_LIB_INSTALL_DIR
232+
PARAKEET_BIN_INSTALL_DIR)
233+
234+
write_basic_package_version_file(
235+
${CMAKE_CURRENT_BINARY_DIR}/parakeet-version.cmake
236+
VERSION ${WHISPER_INSTALL_VERSION}
237+
COMPATIBILITY SameMajorVersion)
238+
239+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/parakeet-config.cmake
240+
${CMAKE_CURRENT_BINARY_DIR}/parakeet-version.cmake
241+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/parakeet)
242+
243+
configure_file(cmake/parakeet.pc.in
244+
"${CMAKE_CURRENT_BINARY_DIR}/parakeet.pc"
245+
@ONLY)
246+
247+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/parakeet.pc"
248+
DESTINATION lib/pkgconfig)
249+
217250
#
218251
# programs, examples and tests
219252
#

cmake/parakeet-config.cmake.in

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
set(PARAKEET_VERSION @WHISPER_INSTALL_VERSION@)
2+
set(PARAKEET_BUILD_COMMIT @WHISPER_BUILD_COMMIT@)
3+
set(PARAKEET_BUILD_NUMBER @WHISPER_BUILD_NUMBER@)
4+
set(PARAKEET_SHARED_LIB @BUILD_SHARED_LIBS@)
5+
6+
@PACKAGE_INIT@
7+
8+
set_and_check(PARAKEET_INCLUDE_DIR "@PACKAGE_PARAKEET_INCLUDE_INSTALL_DIR@")
9+
set_and_check(PARAKEET_LIB_DIR "@PACKAGE_PARAKEET_LIB_INSTALL_DIR@")
10+
set_and_check(PARAKEET_BIN_DIR "@PACKAGE_PARAKEET_BIN_INSTALL_DIR@")
11+
12+
find_package(ggml REQUIRED HINTS ${PARAKEET_LIB_DIR}/cmake)
13+
14+
find_library(parakeet_LIBRARY parakeet
15+
REQUIRED
16+
HINTS ${PARAKEET_LIB_DIR}
17+
NO_CMAKE_FIND_ROOT_PATH
18+
)
19+
20+
add_library(parakeet UNKNOWN IMPORTED)
21+
set_target_properties(parakeet
22+
PROPERTIES
23+
INTERFACE_INCLUDE_DIRECTORIES "${PARAKEET_INCLUDE_DIR}"
24+
INTERFACE_LINK_LIBRARIES "ggml::ggml;ggml::ggml-base;"
25+
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
26+
IMPORTED_LOCATION "${parakeet_LIBRARY}"
27+
INTERFACE_COMPILE_FEATURES cxx_std_11
28+
POSITION_INDEPENDENT_CODE ON)
29+
30+
check_required_components(parakeet)

cmake/parakeet.pc.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=${exec_prefix}/lib
4+
includedir=${prefix}/include
5+
6+
Name: parakeet
7+
Description: Port of NVIDIA's Parakeet model in C/C++
8+
Version: @PROJECT_VERSION@
9+
Libs: -L${libdir} -lggml -lggml-base -lparakeet
10+
Cflags: -I${includedir}

include/parakeet.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,9 @@ extern "C" {
248248
// [EXPERIMENTAL] speed-up techniques
249249
int audio_ctx; // overwrite the audio context size (0 = use default)
250250

251-
int chunk_length_ms = 10000; // length of each chunk in ms
252-
int left_context_ms = 10000; // left context in ms
253-
int right_context_ms = 4960; // right context in ms
251+
int chunk_length_ms; // length of each chunk in ms
252+
int left_context_ms; // left context in ms
253+
int right_context_ms; // right context in ms
254254

255255
// called for every newly generated text segment
256256
parakeet_new_segment_callback new_segment_callback;

0 commit comments

Comments
 (0)