二次元狂热吧 关注:57,195贴子:379,953
  • 5回复贴,共1

【教程】FFmpeg转换文件、转换成黑白

取消只看楼主收藏回复



IP属地:四川1楼2026-02-28 08:25回复
    之前说了如何用libjxl转换为.jxl文件(https://tieba.baidu.com/p/10506723088),但是这个软件仅是一个编码器,功能不多,有局限性。
    所以此处介绍一个更为完善且功能强大的软件——FFmpeg
    去FFmpeg的官网https://ffmpeg.org/下载软件,和之前的教程(https://tieba.baidu.com/p/10506614930)一样设置好环境变量。
    需要注意的是本人系统是windows7 64位旗舰版,最新版本的9.x版本无法运行;最后试到了ffmpeg-6.1.1-full_build才能够运行;在用win7系统的需要注意。


    IP属地:四川2楼2026-02-28 08:27
    回复
      2026-04-26 23:06:57
      广告
      不感兴趣
      开通SVIP免广告
      打开cmd.exe,输入以下命令
      for %f in (*.png) do ffmpeg -i "%f" -c:v libjxl -distance 0.0 -effort 7 "%~nf.jxl"
      此句的意思是,将目录下所有.png文件,转换为无损jxl格式,压缩等级为7。“-c:v libjxl -distance 0.0 -effort 7”意思是引入libjxl库,语法和之前讲解的是一样的,具体值是可以根据实际要求更改。
      比如我们要转换为视觉无损的有损压缩,只需要改一个数字:
      for %f in (*.png) do ffmpeg -i "%f" -c:v libjxl -distance 1.0 -effort 7 "%~nf.jxl"
      把-distance 0.0改成了-distance 1.0,实现轻微的有损压缩,大幅降低体积


      IP属地:四川3楼2026-02-28 08:28
      回复
        开始跑程序后你会发现电脑很卡,做不了别的事情,那是因为没限制软件的cpu使用率,现在我们加个参数来解决此问题
        for %f in (*.tif) do ffmpeg -i "%f" -c:v libjxl -threads 3 -distance 1.0 -effort 7 "%~nf.jxl"
        在"libjxl"后面加了个" -threads 3 ",意思是“只占用3个线程”,本人的电脑是2核4线程(英特尔超线程),相当于留了一个核心给自己用,电脑流畅了很多,当然转换速度也会降低一点。
        这个参数可以根据你电脑实际情况改,比如你电脑有8核心,可以把参数改成"-threads 7",只有两核心可以改成"-threads 1"。如果还是卡,可以进一步把数字调低。


        IP属地:四川4楼2026-02-28 08:29
        回复
          (5L写错了,是我自己删除的,没有被吞)
          如何转换文件格式的同时,把图像转换为黑白?
          扫描的文档有些页数没有彩色印刷,这种时候可以把输出结果转换成黑白,以减小体积。我们只需要加一个参数: -vf hue=s=0
          for %f in (*.png) do ffmpeg -i "%f" -vf hue=s=0 -c:v libjxl -distance 0.0 -effort 7 "%~nf.jxl"
          这样转换出的文件就是黑白色了


          IP属地:四川6楼2026-02-28 08:33
          回复
            可是一个文件夹里有的图像要转成黑白,有的不需要转成黑白,怎么做?
            我们可以把黑白和彩色的图像挑出来,分别统一加一个后缀,比如灰度的图像加个_gray,彩色的图像加_color
            至于批量重命名,我推荐一个叫MiniRenamer的软件,可以去官网下载https://abc100.net/


            (重命名完成后的效果)
            重命名完成后执行以下命令,此命令只会转换带_gray后缀的图像文件,带有黑白转换的参数。
            for %f in (*_gray.png) do ffmpeg -i "%f" -vf hue=s=0 -c:v libjxl -distance 0.0 -effort 7 "%~nf.jxl"
            接着再开一个cmd窗口,同时运行命令,此命令只会转换带_color后缀的图像文件,没有转换成黑白的参数。
            for %f in (*_color.png) do ffmpeg -i "%f" -c:v libjxl -distance 0.0 -effort 7 "%~nf.jxl"

            这下子两个命令互不干扰,各把各自的任务转换完成了。


            IP属地:四川7楼2026-02-28 08:35
            回复