mixvideo-v2/apps/desktop/src/components/FFmpegDebugPanel.tsx

120 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useState } from 'react';
import { Play, FileText, AlertCircle } from 'lucide-react';
import { useMaterialStore } from '../store/materialStore';
/**
* FFmpeg调试面板组件
* 用于测试和调试FFmpeg功能
*/
export const FFmpegDebugPanel: React.FC = () => {
const {
// testSceneDetection,
// getFFmpegStatus,
selectMaterialFiles
} = useMaterialStore();
const [testFilePath, setTestFilePath] = useState('');
const [testResult, setTestResult] = useState('');
const [ffmpegStatus, setFFmpegStatus] = useState('');
const [isLoading, setIsLoading] = useState(false);
// 获取FFmpeg状态
const handleGetFFmpegStatus = async () => {
setIsLoading(true);
try {
// const status = await getFFmpegStatus();
setFFmpegStatus('FFmpeg状态检查功能暂时不可用');
} catch (error) {
setFFmpegStatus(`获取状态失败: ${error}`);
} finally {
setIsLoading(false);
}
};
// 选择测试文件
const handleSelectTestFile = async () => {
try {
const files = await selectMaterialFiles();
if (files.length > 0) {
setTestFilePath(files[0]);
}
} catch (error) {
console.error('选择文件失败:', error);
}
};
// 测试场景检测
const handleTestSceneDetection = async () => {
if (!testFilePath) {
setTestResult('请先选择测试文件');
return;
}
setIsLoading(true);
setTestResult('正在测试场景检测...');
try {
// const result = await testSceneDetection(testFilePath);
setTestResult('场景检测测试功能暂时不可用');
} catch (error) {
setTestResult(`测试失败: ${error}`);
} finally {
setIsLoading(false);
}
};
return (
<div className="bg-white rounded-lg shadow-sm border border-gray-200 p-6">
<div className="mb-6">
<div className="space-y-3">
<div className="flex items-center space-x-3">
<button
onClick={handleSelectTestFile}
className="px-4 py-2 bg-gray-100 text-gray-700 rounded hover:bg-gray-200"
>
</button>
{testFilePath && (
<span className="text-sm text-gray-600 truncate max-w-md">
{testFilePath}
</span>
)}
</div>
<button
onClick={handleTestSceneDetection}
disabled={!testFilePath || isLoading}
className="flex items-center px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700 disabled:opacity-50"
>
<Play className="w-4 h-4 mr-2" />
{isLoading ? '测试中...' : '测试场景检测'}
</button>
</div>
</div>
{/* 测试结果 */}
{testResult && (
<div className="mb-4">
<h4 className="font-medium text-gray-900 mb-3"></h4>
<div className="bg-gray-50 rounded p-4 text-sm font-mono whitespace-pre-wrap max-h-96 overflow-y-auto">
{testResult}
</div>
</div>
)}
{/* 使用说明 */}
<div className="bg-blue-50 rounded p-4">
<h4 className="font-medium text-blue-900 mb-2 flex items-center">
<AlertCircle className="w-4 h-4 mr-2" />
使
</h4>
<ul className="text-sm text-blue-800 space-y-1">
<li> </li>
<li> </li>
<li> </li>
</ul>
</div>
</div>
);
};