首页 > 解决方案 > 批量提取文件大小(以 mb 为单位),然后将其用作进一步命令的条件

问题描述

我是新手,对批处理非常陌生,并不完全了解条件和执行在其中的工作方式。所以请多多包涵。我从这两行开始

"%~dp0\ffmpeg.exe" -i "%~1" -threads 8 -ss 00:04:03.000 -to 00:04:17.000 -c:v libvpx -crf 4 -r 30 -b:v 2050K -vf scale=-1:520 -an -f webm -pass 1 -y NUL
"%~dp0\ffmpeg.exe" -i "%~1" -threads 8 -ss 00:04:03.000 -to 00:04:17.000 -c:v libvpx -crf 4 -r 30 -b:v 2050K -vf scale=-1:520 -an -pass 2 -y "%~n1.webm"

大部分你不需要担心。我只是使用 ffmpeg 命令从拖放的视频文件(开头的“%~1”)中生成 webm。有用!我只是错过了这个(条件/变量)的批处理部分来做我想做的事情:

我正在尝试通过算法选择最佳比特率(即 -b:v 2050K)以尽可能接近 3mb。(我知道通过使用恒定比特率,有一种方法可以强制指定特定的文件大小,但质量较低)

我能想到的最简单的步骤(可能绝不是最优化的)
1- 以 6000k 之类的荒谬比特率运行两行一次
2- 获取第一个 webm 的文件大小(将其放入变量中? )
3- 使用简单的三规则计算新比特率 (newbitrate = (oldbitrate x 2.99)/sizeoffirstwebm)
4- 使用 newbitrate 运行两条线一次增益
5- 获取第二个 webm 的文件大小
6- 计算新比特率三的简单规则 (newbitrate = (oldbitrate*2.99)/sizeofSECONDwebm)
7- 生成最终的 webm,它应该接近我的目标文件大小我这样做两次的原因是因为比特率和大小非常接近,但不是完美的线性相关,因此它可以帮助我更紧密地磨练我的 3mb 目标
当然,渲染任何东西都需要 3 倍的时间,但我认为这是值得的,因为我已经手动完成了。

标签: windowsbatch-filecmdffmpeg

解决方案


推荐阅读