跳至主要内容

iPhone语音备忘录转换成bilibili支持的音频稿件的项目,以及1月25的优化

1,需要生成 mp3 wma flac 这三种 目标格式; 2、生成后,希望在网页中显示该文件链接,由用户自主点击下载; 3、重新给出服务器虚拟环境、调试模式等的安全风险解决方案; 4、给出关闭终端,程序仍运行的代码命令; 

5、希望将该项目集成在 www.insun.xin/m4a 下(就在这个服务器上)而不是直接用IP:5000访问  
针对你提出的各个问题的详细解决方案:

1. 支持生成 MP3、WMA、FLAC 三种目标格式


要让项目支持生成 MP3、WMA、FLAC 三种目标格式,需要对 app.py 文件进行修改,在选择格式的下拉菜单中添加相应选项,并在文件转换逻辑里处理这三种格式。

收起
python
# -*- coding: utf-8 -*-
import os
from flask import Flask, request, send_file, render_template_string

app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

@app.route('/', methods=['GET', 'POST'])
def upload_and_convert():
    if request.method == 'GET':
        html = '''
        <!doctype html>
        <html>
        <head>
            <title>上传 M4A 文件并转换</title>
        </head>
        <body>
            <h1>上传 M4A 文件并转换</h1>
            <form method="post" enctype="multipart/form-data">
                <input type="file" name="file">
                <select name="format">
                    <option value="mp3">MP3</option>
                    <option value="wma">WMA</option>
                    <option value="flac">FLAC</option>
                </select>
                <input type="submit" value="上传并转换">
            </form>
        </body>
        </html>
        '''
        return render_template_string(html)
    elif request.method == 'POST':
        file = request.files['file']
        if file:
            filename = os.path.join(UPLOAD_FOLDER, file.filename)
            file.save(filename)

            target_format = request.form.get('format')
            output_filename = os.path.splitext(filename)[0] + '.' + target_format

            try:
                import ffmpeg
                stream = ffmpeg.input(filename)
                stream = ffmpeg.output(stream, output_filename)
                ffmpeg.run(stream)

                # 返回包含下载链接的页面
                download_url = f'/download/{os.path.basename(output_filename)}'
                html = f'''
                <!doctype html>
                <html>
                <head>
                    <title>转换完成</title>
                </head>
                <body>
                    <h1>转换完成</h1>
                    <p>点击下面的链接下载转换后的文件:</p>
                    <a href="{download_url}">{output_filename}</a>
                </body>
                </html>
                '''
                return render_template_string(html)
            except Exception as e:
                return f"转换失败: {str(e)}"
            finally:
                if os.path.exists(filename):
                    os.remove(filename)


@app.route('/download/<path:filename>')
def download_file(filename):
    file_path = os.path.join(UPLOAD_FOLDER, filename)
    return send_file(file_path, as_attachment=True)


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

2. 在网页中显示文件链接供用户下载


在上述修改后的 app.py 代码里,当文件转换完成后,会返回一个包含下载链接的 HTML 页面,用户点击链接就可以下载转换后的文件。

3. 服务器虚拟环境、调试模式等的安全风险解决方案

虚拟环境


  • 创建和使用虚拟环境:虚拟环境能隔离项目的依赖,避免不同项目之间的依赖冲突。使用以下命令创建和激活虚拟环境:

收起
bash
python3 -m venv venv
source venv/bin/activate

  • 安装依赖:在虚拟环境中安装项目所需的依赖,避免全局安装带来的安全风险。

收起
bash
pip install flask ffmpeg-python

调试模式


  • 关闭调试模式:调试模式会暴露服务器的详细错误信息,可能被攻击者利用。在生产环境中,要关闭调试模式。将 app.run(debug=True) 改为 app.run(debug=False)
  • 使用 WSGI 服务器:在生产环境中,建议使用专业的 WSGI 服务器(如 Gunicorn 或 uWSGI)来运行 Flask 应用。以 Gunicorn 为例,安装并运行应用:

收起
bash
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app

这里 -w 4 表示使用 4 个工作进程,-b 0.0.0.0:5000 表示绑定到所有网络接口的 5000 端口,app:app 表示运行 app.py 文件中的 app 应用实例。

4. 关闭终端,程序仍运行的代码命令


可以使用 nohup 命令让程序在后台运行,即使关闭终端也不会停止。以下是修改后的 bash 文件:

收起
bash
#!/bin/bash
# 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install flask ffmpeg-python
# 开放 5000 端口
sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
# 重新加载防火墙规则
sudo firewall-cmd --reload
# 使用 nohup 让 Gunicorn 在后台运行,并将日志输出到 app.log 文件
nohup gunicorn -w 4 -b 0.0.0.0:5000 app:app > app.log 2>&1 &
# 输出进程 ID
echo $! > gunicorn.pid
# 等待一段时间,确保日志有内容写入
sleep 5
# 输出应用日志,方便查看启动情况
cat app.log

5. 将项目集成在 www.insun.xin/m4a 下


要将项目集成到 www.insun.xin/m4a 下,需要进行以下操作:

配置 Nginx 反向代理


在服务器上安装 Nginx,并进行如下配置:

收起
bash
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

编辑 Nginx 配置文件 /etc/nginx/conf.d/www.insun.xin.conf

收起
nginx
server {
    listen 80;
    server_name www.insun.xin;

    location /m4a {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重新加载 Nginx 配置:

收起
bash
sudo nginx -s reload

修改 Flask 应用的 URL 前缀


在 app.py 中添加 URL 前缀:

收起
python
from flask import Flask, request, send_file, render_template_string, url_for

app = Flask(__name__)
app.config['APPLICATION_ROOT'] = '/m4a'

# ... 其他代码保持不变 ...

@app.route('/download/<path:filename>')
def download_file(filename):
    file_path = os.path.join(UPLOAD_FOLDER, filename)
    return send_file(file_path, as_attachment=True)


if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=5000)

通过以上步骤,你就可以将项目集成到 www.insun.xin/m4a 下,用户可以通过该 URL 访问和使用项目。

评论

此博客中的热门博文

七星连珠的玄学秘密

图片 一生仅有一次的震撼天象,即将在2025年2月28日上演!就在今天晚上,太阳系的七大行星将在夜空中串成一条璀璨夺目的珠链,呈现出罕见的"七星连珠"奇观。而且这次可不一般,火星与木星还会在连珠时形成美轮美奂的双星拱月景象,整整持续四小时十七分,精准度更是达到了三百年以来的最高值。只要天气晴朗,我国全境都能大饱眼福! “七星连珠”或许只能看见三颗 据上海天文台介绍,参与此次连珠的行星自西向东分别为土星、水星、海王星、金星、天王星、木星和火星,它们将出现在黄昏日落后不久。从最西端的土星到最东端的火星,张角为117°,横跨大半个天空。 然而,由于金星更靠北一些,因此这个连珠串看着不是很完美。更重要的是,其中天王星和海王星因为亮度太低了,肉眼不可见。即便完全天黑,天王星的亮度也仅仅在理论上的目力极限边缘。 而土星距离太阳只有12°,基本淹没在黄昏的天光中,直到它落下,天都没完全黑下来(完全天黑是指太阳在地平线以下18°)。 水星也好不到哪里去,它距离太阳14°,仅仅比土星晚10分钟落下,虽说比土星亮2个星等,但想凭肉眼直接找到,难度相当大。当然,不是说完全不可能,但必须满足西方地平线极为开阔、天气特别晴朗、大气透明度极佳等条件,通过拍照或可一试。 一般情况下,你能同时看见的,只有金星、木星、火星这3颗行星。 另外,不仅限于2月28日这一天,在2月20日至3月1日期间都可以。 图片 什么是“行星连珠”? 据说有科学家计算了公元前3001年到公元3000年这6000年间的情况。 当张角在5°以下时,“六星连珠”发生49次,“七星连珠”发生3次,无“八星连珠”或“九星连珠”。如果张角扩大到10°,“六星连珠”有709次,“七星连珠”有52次,“八星连珠”有3次。想要发生“九星连珠”(冥王星曾为第九大行星),必须把张角扩大到15°,这样的话6000年间只有1次这样的“罕见天象”——将发生在2149年12月10日。 《七星连珠~意为变化之象》 罕见的天文奇观——神秘的天象即将到来。 …… 2025年2月28日晚9点左右天空会出现罕见的天文奇观——七星连珠的景象。 …… 太阳系七大行星将在夜空中形成璀璨的珠链,这是巧合还是神秘的预言? …… 在中国古代,天象的变化被认为是和人间兴衰、朝代更迭有着密切关系。七星连珠现象往往被赋予神秘色彩,被认为是某种“天意”的显现。...

信用卡使用成本更低的渠道

  很多朋友持有信用卡,如果从永续债的角度来看,那就可玩性非常大。但是输出渠道就决定了你的成本。办理渠道第一优先级是银行的M。当然需要一定的大表哥沟通与时间成本。那先用我今年找到的立刻能用的渠道吧。 (请注意,对照以下使用步骤时,您随时可以点击公众号页面右上角三个点,选择“浮窗”然后继续手机操作) 识别上方海报,注册完,下载拉生意APP,用进件手机号登陆,首次登陆需要刷脸。 首页-商户管理-新增商户。门头和店内照片、银行台均可任意上传。 提交完资料会自动审核,并不是人工干预。进入支付宝-顶端搜索“商家认证”,完成; 微信认证要稍微留意下,别用扫码,会显示已达上限。在代理端-商户管理-商户查询,找到要认证的商户,点开子商户,(也可以在拉卡拉APP-首页-支付认证-微信认证),复制出商户号,在微信商家认证里搜索。 认证路径:微信顶端搜索:商家注册。 下载“拉卡拉”APP,登录,做好实名认证;左上角三条杠,可以切换商户; 有任何问题,比如注册、改费率,识别下方二维码联系我吧。