| Crates.io | tauri-plugin-use-ffmpeg |
| lib.rs | tauri-plugin-use-ffmpeg |
| version | 0.1.0 |
| created_at | 2025-10-24 05:31:19.192795+00 |
| updated_at | 2025-10-24 05:31:19.192795+00 |
| description | A Tauri plugin for using FFmpeg without pre-installation |
| homepage | https://github.com/lin52025iq/tauri-plugin-use-ffmpeg |
| repository | https://github.com/lin52025iq/tauri-plugin-use-ffmpeg |
| max_upload_size | |
| id | 1898032 |
| size | 194,641 |
一个为 Tauri v2 桌面应用提供使用 FFmpeg 功能的插件,支持自动下载和管理 FFmpeg 二进制文件。
在你的 Cargo.toml 中添加:
[dependencies]
tauri-plugin-use-ffmpeg = { path = "path/to/tauri-plugin-use-ffmpeg" }
npm install tauri-plugin-use-ffmpeg-api
# 或
pnpm add tauri-plugin-use-ffmpeg-api
# 或
yarn add tauri-plugin-use-ffmpeg-api
在 src-tauri/src/lib.rs 中:
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_use_ffmpeg::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
在 src-tauri/capabilities/default.json 中添加:
{
"permissions": [
"core:default",
"ffmpeg:default"
]
}
import { check, download, execute, remove } from 'tauri-plugin-use-ffmpeg-api'
// 1. 检查 FFmpeg 是否可用
const checkResult = await check()
console.log('是否可用:', checkResult.available)
console.log('路径:', checkResult.path)
console.log('版本:', checkResult.version)
// 2. 如果不可用,下载 FFmpeg(带进度回调)
if (!checkResult.available) {
await download(undefined, (progress) => {
console.log(`已下载: ${progress.downloaded} 字节`)
if (progress.total) {
console.log(`总大小: ${progress.total} 字节`)
}
if (progress.percentage) {
console.log(`进度: ${progress.percentage.toFixed(1)}%`)
}
})
}
// 3. 执行 FFmpeg 命令
const result = await execute(['-i', 'input.mp4', '-c:v', 'libx264', 'output.mp4'])
console.log('标准输出:', result.stdout)
console.log('标准错误:', result.stderr)
console.log('执行成功:', result.success)
console.log('退出码:', result.exitCode)
// 4. 删除 FFmpeg(如果需要)
const deleteResult = await remove()
console.log('删除成功:', deleteResult.success)
check(): Promise<CheckResponse>检查 FFmpeg 是否已安装并可用。
返回:
available: boolean - 是否可用path?: string - FFmpeg 可执行文件路径version?: string - FFmpeg 版本信息download(config?: DownloadConfig, onProgress?: (progress: DownloadProgress) => void): Promise<DownloadResponse>下载 FFmpeg 到本地。
参数:
config (可选) - 自定义下载配置onProgress (可选) - 下载进度回调函数返回:
success: boolean - 是否成功path?: string - 下载后的文件路径message?: string - 消息execute(args: string[]): Promise<ExecuteResponse>执行 FFmpeg 命令。
参数:
args - FFmpeg 命令参数数组(不包含 ffmpeg 本身)返回:
success: boolean - 是否成功stdout: string - 标准输出stderr: string - 标准错误输出exitCode?: number - 退出码remove(): Promise<DeleteResponse>删除已下载的 FFmpeg。
返回:
success: boolean - 是否成功message?: string - 消息DEFAULT_CONFIGS = {
macos: {
url: 'https://evermeet.cx/ffmpeg/ffmpeg-8.0.zip',
executable_path: 'ffmpeg'
},
windows: {
url: 'https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n8.0-latest-win64-gpl-8.0.zip',
executable_path: 'bin/ffmpeg.exe'
}
}
import { download } from 'tauri-plugin-use-ffmpeg-api'
// 使用自定义配置下载
await download(
{
url: 'https://your-custom-url.com/ffmpeg.zip',
executable_path: 'path/in/zip/to/ffmpeg'
},
(progress) => {
console.log(`下载进度: ${progress.percentage}%`)
}
)
import { check, download, execute, remove } from 'tauri-plugin-use-ffmpeg-api'
async function convertVideo() {
// 检查 FFmpeg
const checkResult = await check()
// 如果未安装,先下载
if (!checkResult.available) {
console.log('FFmpeg 未安装,开始下载...')
await download(undefined, (progress) => {
if (progress.percentage) {
console.log(`下载进度: ${progress.percentage.toFixed(1)}%`)
}
})
console.log('FFmpeg 下载完成!')
} else {
console.log(`FFmpeg 已安装: ${checkResult.path}`)
console.log(`版本: ${checkResult.version}`)
}
// 执行视频转换
const result = await execute([
'-i', 'input.mp4',
'-c:v', 'libx264',
'-crf', '23',
'-preset', 'medium',
'output.mp4'
])
if (result.success) {
console.log('视频转换成功!')
} else {
console.error('转换失败:', result.stderr)
}
}
FFmpeg 二进制文件会被下载到:
{app_data_dir}/bin/{platform}/ffmpeg[.exe]
例如:
~/Library/Application Support/com.your.app/bin/macos/ffmpegC:\Users\{user}\AppData\Local\com.your.app\bin\windows\ffmpeg.exe~/.local/share/com.your.app/bin/linux/ffmpeg查看 examples/tauri-app 目录获取完整的示例应用(React + TypeScript)。
运行示例:
cd examples/tauri-app
npm install
npm run tauri dev
ffmpeg:default 权限try {
await download(undefined, (progress) => {
console.log(`下载进度: ${progress.percentage}%`)
})
} catch (error) {
console.error('下载失败:', error)
// 可以提示用户检查网络连接或重试
}
const checkResult = await check()
if (checkResult.available && checkResult.version) {
console.log('FFmpeg 版本:', checkResult.version)
}
await download({
url: 'https://your-cdn.com/ffmpeg.zip',
executable_path: 'ffmpeg' // 或 'bin/ffmpeg.exe' (Windows)
})
MIT