总结一下,我有一个用 python 编写的应用程序。
它在输入时需要一堆视频文件。
使用一些魔法并生成合并的视频文件输出。
我没有找到一个好的 GUI解决方案(tkinter,QT,TUI等),所以我选择Svelte框架。
但是出现了一个问题,我如何使用本地文件系统。
在GUI(svelte)上,我必须上传文件才能发送它们在我的 python 脚本中。
别想,这是一个不错的选择。
我没有尝试,因为如果这是一条死胡同,我不想掉进兔子洞。
你说的对,直接在浏览器中使用 JavaScript 处理大量视频文件(比如在 Svelte 中)并与本地文件系统交互,由于安全限制,这并不是一个好的选择。
更好的方法是让你的 Python 后端处理文件系统交互和视频处理。Svelte 前端可以作为用户界面,用于选择文件并触发处理。
以下是如何使用 Python 和 Svelte 来实现这个目标:
1. Python 后端 (例如,使用 Flask):
from flask import Flask, render_template, request, send_from_directory
import os
from werkzeug.utils import secure_filename
app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
# ... 你用于视频处理的 Python 代码 ...
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
uploaded_files = request.files.getlist('file')
filenames = []
for file in uploaded_files:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
filenames.append(filename)
# 调用你的视频处理逻辑,传入文件名列表
# ...
output_filename = process_videos(filenames)
return send_from_directory(app.config['UPLOAD_FOLDER'], output_filename, as_attachment=True)
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
2. Svelte 前端:
<script>
async function handleSubmit(event) {
event.preventDefault();
const files = event.target.files;
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
formData.append('file', files[i]);
}
const response = await fetch('/', {
method: 'POST',
body: formData,
});
if (response.ok) {
// 处理成功的视频合并,例如,提供下载链接
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'merged_video.mp4'; // 根据你的逻辑设置文件名
document.body.appendChild(a);
a.click();
a.remove();
} else {
// 处理错误
console.error('上传失败');
}
}
</script>
<form on:submit={handleSubmit}>
<input type="file" name="file" multiple />
<button type="submit">合并视频</button>
</form>
解释:
-
Python (Flask):
- 设置一个上传文件夹来存储上传的视频。
- 创建一个路由来处理文件上传。
-
使用
secure_filename
来安全地处理文件名。 - 在上传文件后,调用你的视频处理逻辑。
-
使用
send_from_directory
将处理后的视频文件发送回给客户端。
-
Svelte:
- 创建一个简单的表单来选择多个文件。
-
在提交表单时,使用
FormData
对象发送文件到 Python 后端。 - 处理来自 Python 后端的响应,如果成功,提供下载合并后的视频的链接。
你需要安装的 Python 库:
-
Flask
-
werkzeug
使用这种方法,Svelte 前端处理用户界面和文件选择,而 Python 后端处理所有繁重的文件操作和视频处理。这提供了更好的安全性和性能。
标签:python,user-interface,svelte From: 78845431