-frames 操作选项
从视频中输出一帧生成文件:

ffmpeg -i input.flv -ss 00:00:14.435 -frames:v 1 out.png

这个例子将会 seek 到时间进度条位置在 0h:0m:14sec:435msec 处并输出一帧 (-frames:v 1) 输出生成一个 PNG 文件.

fps 视频 filter
每一秒输出一帧图像为图片, 图片命名为 out1.png, out2.png, out3.png,依次顺序输出.

ffmpeg -i input.flv -vf fps=1 out%d.png

每一分钟截一次图, 命名 img001.jpg, img002.jpg, img003.jpg, 依次顺序递增. 例子中的 %03d 为用来规定每个输出图片的序数将格式化使用3位数.

ffmpeg -i myvideo.avi -vf fps=1/60 img%03d.jpg

每十分钟输出一张图片:

ffmpeg -i test.flv -vf fps=1/600 thumb%04d.bmp

select 视频 filter
每个I帧生成一张图片:

ffmpeg -i input.flv -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png

thumbnail 视频 filter
从 100 个连续帧的序列中选取一帧作为缩略图:

ffmpeg -i input.flv -vf thumbnail=n=100 thumb%04d.png

#!/bin/bash

# 定义源路径、目标路径和后缀
SOURCEPATH="./"
DESTINATIONS="*.${1}"

# 循环处理每个文件
for file in `find $SOURCEPATH -name "$DESTINATIONS"`;
do
    # 获取文件名
    basename=$file
    # 修改后缀
    new_basename=$(echo "$basename" | sed "s/\.${1}/\.${2}/")
    # 保存修改后的文件名
    echo "$new_basename"
    mv $basename $new_basename
done

文章链接:https://www.cnblogs.com/zhikes/p/18808551

  1. Index-TTS:语音克隆界的“省心王者”
    在AI语音克隆圈子里,Index-TTS绝对是“懒人福音”。它强不强?我说了不算,你们体验了才知道!

简介:
只需要一段语音样本+你的文案,就能直接生成克隆后的语音。比起CosyVoice还得额外输入语音对应的文本,Index-TTS直接省掉这一步,简单到飞起,操作更人性化。
官方定位是:工业级可控高效零样本文本转语音系统。

亮点:
超强技术:基于XTTS和Tortoise打造的GPT风格TTS模型,融合拼音纠错(汉字发音更准)、标点停顿控制(节奏随心调)。
升级模块:优化了说话人特征表示,集成BigVGAN2提升音质,经过数万小时数据训练,性能吊打XTTS、CosyVoice2、Fish-Speech和F5-TTS。
中文适配:汉字+拼音混合建模,快速修复发音问题;顺应条件编码器+BigVGAN2解码器,音色相似度拉满,音质更稳。

本地部署教程:
需要提前准备好Miniconda和git工具

克隆代码

git clone https://github.com/index-tts/index-tts.git

cd index-tts

创建虚拟环境
conda create -n index-tts python=3.10
conda activate index-tts

打开requirements.txt文件,注释掉WeTextProcessing
WeTextProcessing会报错,后面再来单独安装它。
pip install -r requirements.txt

安装torch以及cuda支持的轮子
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

再来安装WeTextProcessing
pip install WeTextProcessing --no-deps

pip install ffmpeg-python

提示可能缺少模块importlib_resources的话
pip install importlib_resources

下载模型到当前目录的checkpoints目录下
linux系统指令
wget https://huggingface.co/IndexTeam/Index-TTS/resolve/main/bigvgan_discriminator.pth -P checkpoints
wget https://huggingface.co/IndexTeam/Index-TTS/resolve/main/bigvgan_generator.pth -P checkpoints
wget https://huggingface.co/IndexTeam/Index-TTS/resolve/main/bpe.model -P checkpoints
wget https://huggingface.co/IndexTeam/Index-TTS/resolve/main/dvae.pth -P checkpoints
wget https://huggingface.co/IndexTeam/Index-TTS/resolve/main/gpt.pth -P checkpoints
wget https://huggingface.co/IndexTeam/Index-TTS/resolve/main/unigram_12000.vocab -P checkpoints

Windows系统指令
curl -L https://huggingface.co/IndexTeam/Index-TTS/resolve/main/bigvgan_discriminator.pth -o checkpoints\bigvgan_discriminator.pth
curl -L https://huggingface.co/IndexTeam/Index-TTS/resolve/main/bigvgan_generator.pth -o checkpoints\bigvgan_generator.pth
curl -L https://huggingface.co/IndexTeam/Index-TTS/resolve/main/bpe.model -o checkpoints\bpe.model
curl -L https://huggingface.co/IndexTeam/Index-TTS/resolve/main/dvae.pth -o checkpoints\dvae.pth
curl -L https://huggingface.co/IndexTeam/Index-TTS/resolve/main/gpt.pth -o checkpoints\gpt.pth
curl -L https://huggingface.co/IndexTeam/Index-TTS/resolve/main/unigram_12000.vocab -o checkpoints\unigram_12000.vocab

最后运行gradio网页
python webui.py

实际执行的时候报错
ModuleNotFoundError: No module named 'pynini'

执行pip install pynini时又会报错:
cl: 命令行 error D8021 :无效的数值参数“/Wno-register”

先执行这个再安装,会等很长一段时间:

conda install -c conda-forge pynini

食用教程:

①上传一段想要克隆音色的参考音频,②上传文案。③生成语音即可

  1. MegaTTS3:官方限制太多,劝退体验
    我兴冲冲地把MegaTTS3部署到本地,结果发现官方直接锁死了npy音色文件。想用?得先把参考音频发给他们,他们生成npy文件给你才能用。这操作简直是“脱裤子放屁”,项目发展基本上被限制得死死的。
    部署测试浪费了我不少时间,教程写了一半直接作废。直接pass。
  1. Spark-TTS:高效+高质量的语音克隆新星
    简介:
    Spark-TTS是基于大型语言模型(LLM)的文本转语音系统,简单高效又自然,兼顾研究和生产需求。

亮点:
极简架构:基于Qwen2.5打造,无需流匹配等复杂模型,直接从LLM预测代码重建音频,效率拉满。
零样本克隆:无需特定训练数据,就能复制说话者音色,支持跨语言和代码切换,灵活性爆棚。
双语支持:中英文无缝切换,合成自然度超高。
可控生成:支持调整性别、音调、语速,轻松打造虚拟说话人。

本地部署教程:

克隆代码到本地

git clone https://github.com/SparkAudio/Spark-TTS.git
cd Spark-TTS

创建虚拟环境
conda create -n sparktts -y python=3.10
conda activate sparktts

下载依赖
pip install -r requirements.txt
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

模型下载
通过python下载:
from huggingface_hub import snapshot_download

snapshot_download("SparkAudio/Spark-TTS-0.5B", local_dir="pretrained_models/Spark-TTS-0.5B")

通过 git clone 下载:
mkdir -p pretrained_models

(windows下,直接mkdir pretrained_models)

你需要先去安装git lfs工具 (https://git-lfs.com)

git lfs install

git clone https://huggingface.co/SparkAudio/Spark-TTS-0.5B pretrained_models/Spark-TTS-0.5B

调用gradio运行网页界面
python webui.py --device 0

食用教程:

①上传一段想要克隆音色的参考音频,②上传参考音频的文本内容,③输入你的文案内容,④生成音频。 操作过程和CosyVoice类似,都是需要输入参考音频文本内容

一键整合包
想要省去繁琐步骤?公众号回复以下关键词即可获取对应一键包:

index-tts 或 indexTTS
Spark-TTS 或 SparkTTS
下载即用,解压就能跑,无任何限制、不需激活,6G显存轻松驾驭,放心开搞!

这三款AI语音克隆技术各有千秋,Index-TTS省心高效,Spark-TTS灵活强大,MegaTTS3……嗯,自求多福吧。快动手试试,打造属于你的专属语音吧!有任何问题都可以在星球留言快速得到支持,公众号信息太多看不过来。

另外附上之前的语音克隆文章

CosyVoice

https://mp.weixin.qq.com/s/9jkz-HUAcl3ywTI9PKv9yQ

GPT-SoVITS V2

https://mp.weixin.qq.com/s/9M3v3fkP7TDd19MiRjJ8Nw

原文链接:https://juejin.cn/post/6950828432196386829

CLI 与 CGI
首先来看一下 CLI 和 CGI 的区别。我们都知道,Nginx 使用的是 FastCgi 来调用 PHP 的服务。 CGI 是通用编程接口,也就是给调用者提供的一种使用本程序的接口。 Nginx 这种类型的服务器并不是直接运行 PHP 程序的,而是通过 FastCgi 来执行 PHP 程序并获得返回结果。

CLI 则是 Command Line Interface,即命令行接口。主要用作 PHP 的开发外壳应用。也就是用 PHP 来进行 shell 脚本的开发。相比 linux 原生的 shell 来说,当然是方便了许多。在命令行状态下,直接使用 php 命令就可以运行某段 PHP 代码或某个 PHP 文件了。

另外,我们在命令行也可以直接使用 phpcgi 来运行一段 PHP 代码或者某个 PHP 文件,它和直接使用 php 命令来运行有什么区别呢?

  • CLI 的输出没有任何头信息
  • CLI 在运行时,不会把工作目录改为脚本的当前目录
  • CLI 出错时输出纯文本的错误信息(非 HTML 格式)
    强制覆盖了 php.ini 中的某些设置,因为这些设置在外壳环境下是没有意义的

    
    // PHP的CLI命令行运行模式浅析.php
    echo getcwd();
    

    我们选取最典型的一个例子,我们运行的这个文件中,使用 getcwd() 输出当前脚本运行的目录,可以看出两种运行方式输出的结果明显不同。php-cgi 是以文件所在目录为基准输出,而 php 则是以当前运行这个命令的目录为基准输出。

直接运行 PHP 代码
在做一些简单的调试的时候,我们可以直接通过 CLI 来运行一段代码。

// php -r "echo 121;"
// 121

也就是简单的加个 -r 参数,后面跟上一段代码,这段代码必须用引号括起来。而且这个引号更推荐使用单引号,后面的例子会展示为什么用单引号更好。

CLI 获取参数
命令行模式下也是可以给脚本传递参数的。


// PHP的CLI命令行运行模式浅析.php
print_r($argv);
// php-cgi dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php 1 2 3
// X-Powered-By: PHP/7.3.0
// Content-type: text/html; charset=UTF-8

// php dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php 1 2 3
// Array
// (
//     [0] => dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
//     [1] => 1
//     [2] => 2
//     [3] => 3
// )

在测试文件中,我们打印了 argv变量。PHP脚本运行的时候,会将命令行的所有参数保存在argv变量。PHP脚本运行的时候,会将命令行的所有参数保存在argv 变量中,并且还有一个 $argc 变量会保存参数的个数。

我们依然是使用 php-cgi 和 php ,两种模式来测试,从这里我们能发现 php-cgi 模式中 $argv 打印的内容竟然是头信息,而不是具体的参数信息。这也没错,毕竟 CGI 模式本来就是为 Web 服务器提供的接口,所以它接收的是 post 、 get 这类的参数而不是命令行的参数。

CLI 模式下我们正常获得了参数内容,并且 $argv[0] 始终保存的是当前运行文件及路径。

CLI 命令行实用选项
最后,我们再介绍一些命令行中常用的选项。
-r 直接运行代码时的参数传递


// php -r "var_dump($argv);" app 
// Warning: var_dump() expects at least 1 parameter, 0 given in Command line code on line 1
// 双引号 ",sh/bash 实行了参数替换

// php -r 'var_dump($argv);' app
// array(2) {
//     [0]=>string(19) "Standard input code"
//     [1]=>string(3) "app"
// }

// php -r 'var_dump($argv);' -- -h
// array(2) {
//     [0]=>string(19) "Standard input code"
//     [1]=>string(2) "-h"
// }

第一段代码在对双引号运行的 CLI 代码进行参数传递的时候,会直接报警告。其实很好理解,双引号里面的$会让系统的 sh/bash 以为这是个变量从而进行变量参数替换。所以更推荐使用单引号进行日常的简单测试。

第二段代码能够正常打印传递进来的参数内容。第三行代码则是需要传递带 - 符号的内容时,需要先给一个 -- 参数列表分隔符。这是因为 -xxx 的内容会让 php 命令认为这是一个命令选项而不是参数,所以我们添加一个分隔符就可以让分隔符之后的参数内容原样传递进代码中。

交互式地运行 PHP


// php -a
// php > $a = 1;
// php > echo $a;
// php > 1

添加一个 -a 选项,PHP 就会以交互式地形式运行,我们可以直接在交互状态下写代码或运行任何内容。

查看 phpinfo() 及已经安装的模块
这两个应该是大家经常会使用的两个选项。

// 输出 phpinfo()
// php -i

// 输出 PHP 中加载的模块
// php -m

// 查看模块详细信息
// php --ri swoole 

另外我们还可以通过 --ri 模块名 这个命令来查看具体某个扩展模块的详细信息。比如这里我们可以查看到 swoole 扩展的版本及相关的配置信息。

查看某个文件


// 显示去除了注释和多余空白的源代码
// php -w dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
// <?php
//  echo getcwd(); print_r($argv);

// 通过 linux 管道读取输入
// cat dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php | php -r "print file_get_contents('php://stdin');"
// ......这个文件里面所有的内容

最后两个小技巧,一个是通过 -w 选项,我们可以打印这个 php 文件中所有非注释和换行的内容。可以看成是像前端的代码压缩一样的能力。我们这个测试文件中有非常多的注释,通过这个命令后我们打印出来的内容是去除掉所有注释和空白行的结果。

另一个是我们可以用 linux 管道的方式向 PHP CLI 发送数据。这里我们通过 cat 查看我们的测试文件然后通过管道发送给 PHP CLI,在脚本中使用 STDIN 来读取管道发送过来的内容完成了整个文件内容的打印。这里我们没进行任何过滤,所以打印的是整个文件里面的内容,大家可以运行这个命令来测试。

总结
其实命令行模式运行的时候还有很多的选项,这里我们只是选取了一部分非常有用的内容进行展示。当然,大部分框架都提供了用于命令行的脚本框架,比如 laravel 中可以通过 php artisan make:command 来创建命令行脚本,然后使用 php artisan 来运行框架中的脚本。这些内容将来我们在学习框架方面知识的内容将会进行详细的讲解。

命令行 CLI 模式的应用非常广泛,几乎任何项目中都会使用到,所以,深入的学习掌握它将会使我们大受裨益。

官方网站:
https://vueuse.org/

VueUse是一个基于Composition API的实用函数集合,它的功能丰富有200+功能,无缝迁移适用于Vue3和Vue2.7版本之后 同时支持tree shaking,中文文档由itxst翻译,并匹配了对应的demo例子,从VueUse 4.0版本开始,通过vue-demi实现了一个包同时支持 Vue 2 和 Vue 3 。
中文教程:
https://www.itxst.com/vueuse/tutorial.html

VueUse是一个包含众多实用工具方法和Hooks的Vue.js库,如useMouse、useKeyboard等,帮助开发者避免重复逻辑,实现鼠标追踪、键盘监听等交互功能,提高开发效率和应用性能。

技术博客文章原文:
https://blog.csdn.net/weixin_46254812/article/details/130651068