吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8464|回复: 61
收起左侧

[Windows] ShanaEncoder v6.0.1.7 轻量级视频压制工具,支持合并字幕、视频格式解码转换、拼接

    [复制链接]
wxs513 发表于 2024-5-15 20:16
本帖最后由 wxs513 于 2024-5-15 20:22 编辑

QQ截图20240515201239.png

QQ图片20240515202102.png

以下为GPT 4翻译




AMF、NVENC、QSV 视频编解码器,点击这里查看系统要求。

※ 从 ShanaEncoder 6.0 版本开始,需要 WebView2 运行时,如果未安装,将在 ShanaEncoder 安装程序或运行 ShanaEncoder 时自动安装。

※ 从 ShanaEncoder 6.0 版本开始,在编码窗口中将显示基于 Chromium 的 WebView2 Web 浏览器。

※ 在 Web 浏览器中,为了激活 ShanaEncoder 社区,可能会显示 ShanaEncoder 站点上的帖子,并显示站点内的广告。

ShanaEncoder 6.0 主要新增功能

按编解码器选择解码器功能
硬件加速播放功能
多重编码功能
快速添加文件功能
版本 6.0.1.7 更新内容

在安装程序中添加了 ShanaEncoder 使用协议
更改了程序信息中的许可内容,并添加了 ShanaEncoder 使用协议链接
修复了预设选择面板中当预设名称过长时工具提示被截断的问题
版本 6.0.1.6 更新内容

修复了双通道编码时进入双通道模式时实际输出文件位置与输出文件播放/信息中打开的文件位置不同的问题
修复了使用 Envelop Waveform 时颜色显示错误的问题
ShanaMediaInfo 改进
版本 6.0.1.5 更新内容

从 ShanaEncoder 6.0 版本开始,您可以在快速设置中取消 HDR 到 SDR 的色调映射复选框,以便原样编码 HDR 信息。
如果要复制 HDR 信息进行编码,请使用 ShanaEncoder 6.0 之后的版本。
修复了添加数百个文件进行编码时,ShanaEncoder 无法打开其他窗口的问题
修复了使用裁剪功能并启用自动调整大小以匹配比例时产生奇数值未更改为偶数值的问题
修复了在一般模式下编码时图表背景显示为深色模式背景的问题
修复了列表中没有播放时间时不显示预期输出大小的问题
修复了错误的俄语翻译
改进了编码记录,以显示整个编码经过的时间
添加了打开输入文件位置的功能
根据 CPU 性能确定作业数量时,自动值为 0 时,作业数量 = 当前系统线程数 / 8(小数点向上取整,如果计算值大于 6,则最大值为 5)更改为
版本 6.0.1.4 更新内容

修复了对于字幕流为 Subtitle: none 的文件进行编码时视频流未编码的问题
在 ShanaEncoder 主 UI 底部显示的原始文件名称前添加了指示列表的编号
版本 6.0.1.3 更新内容

修复了在内存不足、错误等某些情况下编码任务已结束但仍显示为编码进行中的问题
当由于虚拟内存设置导致内存不足时,改进了 ShanaEncoder UI 异常显示的问题,一旦有足够的内存,ShanaEncoder UI 将正确显示
将 VP9 编解码器的默认解码器设置更改为 SW(FFmpeg)值
在自动设置多重编码任务数量时,除了 CPU 的线程数之外,还根据内存大小确定任务数量
自动值为 0 时,作业数量 = 当前系统的线程数 / 2(如果值大于 6,则限制为 5),并确定以下内存大小的最大作业数量
如果内存小于 [8GB],则最大作业数量为 [1]
如果内存小于 [16GB],则最大作业数量为 [2]
如果内存小于 [24GB],则最大作业数量为 [3]
如果内存小于 [32GB],则最大作业数量为 [4]
版本 6.0.1.2 更新内容

在查看编码记录时,修复了编码已完成项目的记录显示重复的问题
删除了显式限制缓存大小的部分,并改为使用自动缓存清理功能
添加了一个选项,允许在删除程序中选择是否删除缓存文件夹
版本 6.0.1.1 更新内容

在未使用固定帧速率的情况下添加图像字幕(例如 PGS),导致输出文件的播放时间比原始视频的播放时间更长的问题
此问题也适用于 ShanaEncoder 5.3.1.1 之前的版本,因此主要使用图像字幕(如 PGS)的用户请使用 ShanaEncoder 6.0.1.1 之后的版本。
修复了使用 filter_complex 参数时,输出文件的视频流编码为两个的问题
此问题适用于 ShanaEncoder 6.0 和 6.0.1 版本,因此修复了在多重编码时编码相同名称文件会同时编码输出文件或添加编号而不是跳过的问题
在多重编码期间,如果文件已存在,则在使用覆盖设置时只编码一个正在进行编码的项目,而其他项目将被跳过
修复了在某些操作系统(如 Windows 7)中,没有写入设置文件的权限时,未通过用户帐户控制(UAC)打开,并将数据保存到 VirtualStore 的问题
改进了 WebView2 的 EBWebView 文件夹管理方式
添加了可以缓存的大小限制,并添加了自动清理缓存数据的功能
在安装路径或以管理员权限运行时,将 EBWebView 文件夹保存到 %LocalAppData%\ShanaEncoder 中,并在便携式路径中运行时,保存到用户特定目录的 settngs 文件夹下
通过 ShanaEncoder 卸载程序进行卸载时,改进了删除存储在 %LocalAppData%\ShanaEncoder 中的 EBWebView 文件夹的方式
改进了在使用暗模式时,编码窗口中显示的 Web 浏览器也以暗模式显示的功能
版本 6.0.1 更新内容

修复了 HEVC_QSV 编码问题
修复了添加图像字幕后视频流被添加的问题
改进了只最小化编码窗口的功能
修复了添加章节信息时出现错误的问题
库更新

FFmpeg Shana 2023.08.08.190
amf 1.4.30
amr 0.1.6
aom 3.6.1-981-gdc1e428f77
ass(Shana) 0.17.1
avisynthplus 2023
expat 2.5.0
ffnvcodec 12.0.16
fontconfig 2.14.2
freetype 2.13.1
fribidi 1.0.13
harfbuzz 8.1.1
iconv 1.17
mfx 2023(API 1.35)
openjpeg 2.5.0
opus 1.4
x264 0.164.3107 a8b68eb
x265 3.5+103-8f18e3ad3
zimg 3.0.5
MediaInfoLib 23.07
改进

添加了德语、俄语和西班牙语
ShanaMediaInfo 现在只支持韩语和英语
将字幕设置中的轮廓宽度和阴影深度的默认值从 1.0 更改为 2.5
当使用自动比例调整大小功能时,修复了在某些情况下产生奇数值未更改为偶数值的问题
使用暗模式时,修复了将主窗口缩小后编码列表中的文本显示为黑色的问题
修复了在播放视频时单击加载屏幕会导致屏幕缩小的问题
在 Windows 11 上,改进了获取最新版本和 RSS 订阅信息时使用的加密安全协议 TLS 1.3 版本
改进了输入文件信息,以显示视频编解码器的配置文件
在使用固定帧速率时,改进了输出文件信息中显示 CFR 的功能
将字体颜色关闭标签改为与字体关闭标签相同的操作
注意事项

点击此处查看病毒检测结果。
安装程序的哈希值为 SHA-256,BD5C00BE0498FA5696C038F45FBB51470F1EE71D88515B3A5840A9C1F9D8B6B9,请用于完整性检查。
如果防火墙阻止通过安装程序下载进行安装,或者在无法访问互联网的地方进行安装,则请下载安装程序和以下 32 位和 64 位文件,并将其保存在与安装程序相同的位置,然后运行安装程序以继续安装。



官网샤나인코더(ShanaEncoder) 6.0.1.7 - Shana  (下载便携版需注册)
下载地址 (安装包和便携版双版本)链接:https://pan.baidu.com/s/1NtXi2HsVZR0v6KCmko4Hlw?pwd=impu 提取码:impu

免费评分

参与人数 15吾爱币 +14 热心值 +11 收起 理由
禾水木 + 1 + 1 热心回复!
GT1999 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
zai2006 + 1 谢谢@Thanks!
殒心 + 1 + 1 谢谢@Thanks!
古典小子 + 1 + 1 能用,谢谢!
tylor + 1 不想先下载恶心的毒盘啊
alfred2023 + 1 + 1 谢谢@Thanks!
人生若曦 + 1 + 1 我很赞同!
Cudet + 1 谢谢@Thanks!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
liukai102125 + 1 + 1 谢谢@Thanks!
dogox + 1 + 1 我很赞同!
way824325223 + 1 谢谢@Thanks!
hjk1203440 + 1 + 1 %D0%BB%D0%BB%40Thanks%A3%A1
15911974915 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

HuaGdao1 发表于 2024-5-17 13:12
更新了吗 挺好的,不过我现在都是直接用FFmpeg 使用命令行转码:
@cd/d   %~dp0 
@echo off
@cls
@color 0E

set input=(*.avi,*.mp4,*.mov,*.ts,*.wmv,*.m2t,*.webm)

rem md H.265 2>nul
for /R %%i in %input% do (
    ffmpeg -hide_banner -copy_unknown -i "%%i" -c:v hevc_nvenc -rc 1 -cq 24 -preset 15 -tune 1 -r 24 -tag:v hvc1  -c:a libopus -b:a 64k -ar 24000 -f mp4 -y "%%~ni.mp4"
)
allrobot 发表于 2024-7-6 15:17
HuaGdao1 发表于 2024-5-17 13:12
更新了吗 挺好的,不过我现在都是直接用FFmpeg 使用命令行转码:
[md]```
@cd/d   %~dp0

挺好,我也是用ffmpeg指令,用的https://github.com/alexheretic/ab-av1 指定VMAF分数自动压缩,方便
python写了简单脚本,把一个目录下的所有视频转成AV1编码器,转换成功就把原视频删除到回收站,跳过已存在的AV1、VP9、HEVC编码器,依赖ffprobe、ab-av1、ffmpeg实现,最好用闲置的电脑跑起来,用的单线程(因为一个ffmpeg进程就占用90%以上,鼠标移动都卡顿,如果不想电脑卡顿,可加--svt lp=xx参数,xx为CPU核心的一半),要最好画质就调av1预设设为4
[Python] 纯文本查看 复制代码
# -*- coding=utf-8
import logging
import subprocess
from re import sub, search
import pyperclip, sys

import os

import send2trash

# 配置日志
logging.basicConfig(filename='error_log.txt', filemode='a', format='%(asctime)s - %(levelname)s - %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S', level=logging.ERROR)


def is_video(filename: str, skip=False) -> bool:
    """
    判断文件是否为视频文件
    如果是H264、vp8、mpeg2编码器的视频文件就返回True
    :param filename:
    :return:
    """
    try:
        cmd = subprocess.run(
            rf'ffprobe -show_streams "{filename}"',
            shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding='utf-8')
        if skip:
            # 跳过特定的动图格式
            unalloyed_bool = any(filename.lower().endswith(suffix) for suffix in ['.swf', '.apng', '.gif'])
            # 跳过已压缩的某些编码器
            if search('\ncodec_name=(av1|hevc|vp9)\n', cmd.stdout) or unalloyed_bool:
                return False
        # 跳过字幕文件格式
        unalloyed_bool = any(filename.lower().endswith(suffix) for suffix in ['.srt', '.ass', '.ssa','.vtt','.lrc','.cc','.utf','.txt','.qly','.ksc','.a16'])
        if unalloyed_bool:
            return False
        # 判断依据是视频流信息是否包含视频文件的时长
        video_search = search('\nduration=(\\d+\\.\\d+)', cmd.stdout)
        # 判断依据是视频文件的后缀名,一些动图或swf不压缩
        if video_search:
            # 视频长度至少0.1秒,说明是视频文件
            if float(video_search.group(1)) > 0.1:
                return True
        if search('\ncodec_name=(vp8|vp9)\n', cmd.stdout):
            # vp8没有duration信息,但可以判断是否为视频文件
            return True
        logging.info(f'{filename}是未知的编码器')
        return False
    except:
        # 报错,说明文件不是视频文件
        return False


def rename_files(directory):
    """
    重命名目录下所有视频文件,文件名格式为:文件夹名_文件名
    :param directory:
    :return:
    """
    # 遍历目录下的所有文件夹
    for foldername, subfolders, filenames in os.walk(directory):
        for filename in filenames:
            # 跳过非视频文件
            old_file = os.path.join(foldername, filename)
            if is_video(old_file):
                # 构建新的文件名
                new_filename = filename
                # print(new_filename)

                new_str=''# 注释掉,是去重
                for name in foldername.split(os.sep)[:directory.split(os.sep).__len__() - 1:-1]:
                    # 命名新文件名,从最深层文件夹名到最浅层文件夹名都加上
                    if not new_filename.startswith(name):
                        new_filename = name + '_' + new_filename
                        new_str = name + '_' + new_str# 注释掉,是去重
                # print(new_str)
                # print(not filename.startswith(new_str))
                # 构建原文件和新的完整路径
                if not filename.startswith(new_str):
                    new_file = os.path.join(foldername, new_filename)
                    # 如果文件名已经包含文件夹名,则跳过
                    # 重命名文件
                    os.rename(old_file, new_file)

                    # 取消重命名,把new_file换成old_file.replace(foldername.split(os.sep)[-1] + '_','')
                    # print(foldername.split(os.sep)[-1])
                    # print(filename.lower().startswith(foldername.split(os.sep)[-1]))
                    print(f'原文件: {old_file}\n新文件: {new_file}')




def rename_add(directory, add_str):
    """
    重命名目录下所有视频文件,文件名格式为:文件夹名_文件名
    :param directory:
    :return:
    """
    # 遍历目录下的所有文件夹
    for foldername, subfolders, filenames in os.walk(directory):
        for filename in filenames:
            # 跳过非视频文件
            old_file = os.path.join(foldername, filename)
            if is_video(old_file):
                # 构建新的文件名
                new_filename = add_str + '_' + filename
                # 构建原文件和新的完整路径
                new_file = os.path.join(foldername, new_filename)
                # 如果文件名已经包含文件夹名,则跳过
                if not filename.startswith(add_str):
                    # 重命名文件
                    os.rename(old_file, new_file)
                    # 取消重命名,把new_file换成old_file.replace(foldername.split(os.sep)[-1] + '_','')
                    # print(foldername.split(os.sep)[-1])
                    # print(filename.lower().startswith(foldername.split(os.sep)[-1]))
                    print(f'原文件: {old_file}\n新文件: {new_file}')


def delete_files(directory):
    """
    目录下如果已存在av1格式,又存在同名的MP4视频文件,则删除MP4文件到回收站
    :param directory:
    :return:
    """
    for filename in os.listdir(directory):
        if filename.lower().endswith('.av1.mp4'):
            ole_file = os.path.join(directory, filename.replace('.av1.mp4', '.mp4'))
            if os.path.exists(ole_file):
                send2trash.send2trash(ole_file)


def video_compress(directory):
    """
    对目录下所有视频文件进行压缩,使用SVT-AV1压缩
    :param directory:
    :return:
    """
    for foldername, subfolders, filenames in os.walk(directory):
        for filename in filenames:
            old_file = os.path.join(foldername, filename)
            if is_video(old_file, skip=True):
                # 通过cmd执行命令
                print(f'正在压缩 {filename}')
                # 获取执行输出
                try:
                    cmd = subprocess.run(
                        f'ab-av1 auto-encode -i "{old_file}" --preset 10 --svt tune=0  --svt film-grain=4 --svt film-grain-denoise=0 --pix-format yuv420p10le --max-crf 60 --min-crf 5 --min-vmaf 94',
                        shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True,
                        encoding='utf-8')
                    print(f'压缩完成')
                    send2trash.send2trash(old_file)
                except subprocess.CalledProcessError as e:
                    # 如果命令执行出错,记录错误信息
                    error_msg = e.stderr
                    if 'Error: Failed to find a suitable crf' in error_msg:
                        print(f'压缩失败,原因:未能找到合适的crf')
                    else:
                        logging.error(f"{'-' * 100}\n压缩视频出错: {old_file}\n{e.stderr}\n{'-' * 100}")
                        print(f"压缩视频发生了错误: {old_file}")


if __name__ == '__main__':
    # 给文件添加文件夹名
    # rename_files(r'F:\BaiduNetdiskDownload\xianyu6')
    # 给文件添加特定前缀
    # rename_add(r'F:\BaiduNetdiskDownload\2D动画\Captain-Lamb_user15643288','Captain-Lamb_')
    # 压缩视频
    paths = [
        # r'F:\BaiduNetdiskDownload\TheGRTeam',
        # r'F:\BaiduNetdiskDownload\CBX-CJW',
        # r'F:\BaiduNetdiskDownload\HMV ブラン 旧 秘O 5月红P合集',
        # r'F:\BaiduNetdiskDownload\カズサとあけおめックス',
        # r'F:\BaiduNetdiskDownload\[3D] わるいスライムの動画置場 (わるいスライムです)',
        r'F:\BaiduNetdiskDownload\2D动画',
        r'',
        r'',
        r'',
        r'',
    ]
    for path in paths:
        video_compress(path)
    # video_compress(r'F:\BaiduNetdiskDownload\2D动画\Hard-Degenerate\新建文件夹')

    # 删除mp4原文件
    # delete_files(r'F:\BaiduNetdiskDownload\20240615\超分补帧')
Arclz 发表于 2024-5-15 20:27
这东西能设置的参数太多,用起来就是不知道咋设置好,我都是用pr调一下码率就成
krcakgege 发表于 2024-5-15 21:46
只会用压缩。。。。。
gon360 发表于 2024-5-15 22:12
Arclz 发表于 2024-5-15 20:27
这东西能设置的参数太多,用起来就是不知道咋设置好,我都是用pr调一下码率就成

压电影电视剧十分方便。这个总不能用PR吧?而且支持显卡加速,功能多,也非常快。详细用法可以去经的贴吧。那里高手多,教程也多。
gon360 发表于 2024-5-15 22:13
这个软件我长期用,各版本都用过。头一次听说便携版要注册。这个软件是免费软件哦。
另外,这个版本出了好久了。
 楼主| wxs513 发表于 2024-5-15 22:38
gon360 发表于 2024-5-15 22:13
这个软件我长期用,各版本都用过。头一次听说便携版要注册。这个软件是免费软件哦。
另外,这个版本出了好 ...

官网下载便携版要注册账号
cbkxh 发表于 2024-5-15 22:57
感谢分享,有空试试
nojon 发表于 2024-5-15 23:06

感谢分享
tbloy 发表于 2024-5-16 00:05
不错的小软件,支持一下吧
TW烟雨 发表于 2024-5-16 00:06
支持一下楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 04:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表