YohoYang / VSGUI

一款全新VapourSynth视频压制软件。A video encode GUI like MeGUI for VapourSynth.
GNU General Public License v3.0
133 stars 7 forks source link

[Feature Request] 添加更多的编码器支持 #6

Closed katyurua closed 9 months ago

katyurua commented 1 year ago

GUI爱好者表示捡到宝了,啥都集成了,开箱即用非常方便,界面也很简洁明了。

  1. 我注意到tools目录下已有FFMPEG,是否可在编码器设置页面选择使用ffmpeg进行多种格式编码? 比如ffmpeg的libaom进行av1编码。 VS是支持ffmpeg的 https://www.vapoursynth.com/doc/gettingstarted.html#output-with-vspipe

    vspipe -c y4m script.vpy - | ffmpeg -i - encoded.mkv

    (ffmpeg版本也可以更新到新版了,或许可以手动替换exe?ffmpeg官网也有给出exe的下载地址 release builds version: 6.0 2023-03-04)

  2. 我看到目前内置的encoder已经有rigayaNVEnc,但版本老旧,是5.46,其作者已经更新到7.21

  3. 和上面提到的NVEnc同类的显卡编码器还有Intel和AMD的,希望作者能添加进去,造福非N卡用户,rigaya也有提供预编译二进制文件(exe/deb/rpm)。AMD的VCEEncIntel的QSVEnc

staxrip就通过ffmpeg提供了许多编码格式(不过staxrip在vs方面不大行,而且东西塞得太多了,对于只用vs编码视频的人来说实在有点臃肿。) staxrip sample


PS:VSGUI用着实在是方便了,谢谢作者大佬,希望大佬能一直更新下去。

YohoYang commented 1 year ago

1、平时没有用ffmpeg来压制过视频,有时间的话我会研究一下 2、目前确实没有什么办法来自动去使这些exe保持最新,手动检查的话又比较费时费力,不知道有没有什么其他的好办法 3、我在考虑让编码器支持自定义设置,这样的话不管用户想要使用什么编码器,只要自己设置一下使用的参数格式,然后指定编码器路径就可以支持各种想要的编码器了,这样不管是amd还是Intel还是av1和vp什么的都可以让大家自己去配置和支持。而且我没有AMD的卡,可能也没办法自己去测试 4、另外把全部编码器都集成会导致整个软件包体变得非常巨大,也有考虑过制作一个类似于megui的对于不同库的开关和设置功能,但好麻烦(懒) 5、我在包里用的ffmpeg是精简编译版,因为我这边主要是用来处理解流和ts的分析一类的工作,估计这个是不能压制的。

katyurua commented 1 year ago
  1. ffmpeg用着和x264,x265差不多的,直接调用ff内部的编码器就行 比如这个调用ff内部的x264进行h264编码,参数啥的都和用x264的exe一样 -c:v 后面是视频编码器及参数 ,-c:a是音频的,copy就是复制音频流不编码。

    ffmpeg.exe -i input.mp4 -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv
  2. exe就让用户手动更新吧,这样可能更好。用户能选择自己想要的版本使用。

  3. 非常赞成,比如在目前已有的encoder目录下弄个customEncoder目录,用户往里放自己的exe,然后gui里识别出来就能直接用,大家都省事了。

  4. 这样的话那更应该集成完整的ffmpeg了,ffmpeg.exe才125MB,包含了几乎所有常用的的音视频编码器(见末尾列表) 仅仅125mb,就能给普通用户大量的可选编码格式,而进阶用户也可以自行添加额外的编码器。(x265-yuuki asuna 之类的)

  5. 解析流好像应该用ffprobe而不是ffmpeg?记不太清了,只记得是用来解析的?功能很多不过我也不熟,简单试了下不带参数默认的。 用其他参数还可以分析数据流和数据包甚至每帧的信息。

\ffmpeg-6.0-full_build\ffmpeg-6.0-full_build\bin>ffprobe.exe test.mp4
ffprobe version 6.0-full_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : ShanaEncoder
  Duration: 00:00:59.89, start: 0.235000, bitrate: 39442 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 39439 kb/s, 23.98 fps, 23.98 tbr, 90k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]

ffmpeg内置编码器列表

视频编码器
Video Encoders
1 a64_multi, a64_multi5
2 Cinepak
3 GIF
4 Hap
5 jpeg2000
6 librav1e
7 libaom-av1
8 libsvtav1
9 libjxl
10 libkvazaar
11 libopenh264
12 libtheora
13 libvpx
14 libwebp
15 libx264, libx264rgb
16 libx265
17 libxavs2
18 libxvid
19 MediaFoundation
20 mpeg2
21 png
22 ProRes
23 QSV Encoders
24 snow
25 VAAPI encoders
26 vbn
27 vc2
音频编码器
Audio Encoders
1 aac
2 ac3 and ac3_fixed
3 flac
4 opus
5 libfdk_aac
6 libmp3lame
7 libopencore-amrnb
8 libopus
9 libshine
10 libtwolame
11 libvo-amrwbenc
12 libvorbis
13 mjpeg
14 wavpack
YohoYang commented 1 year ago

我预计ffmpeg还是会用自定义编码器的方法来支持,然后自行放一个完整版的ffmpeg进去就好了,等有时间来整,估计不会很快。如果懂得写代码可以直接上手

katyurua commented 1 year ago

C# WINFORM .NET啥的都忘完了(逃.jpg)

另外刚刚发现个大问题

能否添加【批量添加vpy脚本到队列】的功能?逐个手动添加实在是难受,每添加一个vpy进去就得加载一会儿,特别是压制集数多的视频的时候。

比如有50个vpy,在队列页面弄个批量添加的按钮,直接把这50个vpy统一指定编码器参数并添加到队列里

YohoYang commented 1 year ago

但这样批量添加是只添加视频,音频就不管了,还是你想音频也一起加上。现在可以改文件夹里的json,来快速批量弄出任务来

katyurua commented 1 year ago

有视频就可以了,音频目前可以不管无所谓的

看了下JSON,几十个任务都在一行里,和TXT一样,可读性实在难受 路径也在里面,即便是复制粘贴也容易弄错,鼠标一抖,多个斜杠少个引号啥的

感觉从GUI进行批量添加视频的功能还是非常必要的

音频倒不是问题,有则锦上添花,无则FFMPEG,FOOBAR啥的都可以,工具多到数不完

只要视频这块完善了,就非常好了

大佬加油

PS: JSON弄成带换行的可读性应该会好很多

[
   {
      "queueid":1,
      "group":"",
      "status":"waiting",
      "type":"video",
      "encoderid":7,
      ...
   },
   {
      "queueid":2,
      "group":"",
      "status":"waiting",
      "type":"video",
      "encoderid":7,
      ...
   },
    ...
]
YohoYang commented 1 year ago

json格式有工具可以一键处理,比如https://jsoneditoronline.org/ 。批量添加倒是也可以有的,后面我再整,业余做并不会马上更新。所以现在最快的办法就是手动改json再重开软件

katyurua commented 1 year ago

大佬加油,慢慢来

YohoYang commented 9 months ago

大佬加油,慢慢来

终于在今年内把flag收了,自定义编码器以及批量添加都有了,还有其他更新。 https://github.com/YohoYang/VSGUI/releases/tag/v1.0.0