windows - 批量提取文件大小(以 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 倍的时间,但我认为这是值得的,因为我已经手动完成了。
解决方案
推荐阅读
- javascript - GitHub API - 基本授权(用户名:密码)401 状态
- alfresco - Alfresco Context 初始化失败:备份还原后的 RenditionServiceException
- android - 如何向我在 Azure 上注册的所有设备发送推送通知
- c# - TeamsActivityHandler OnTeamsCardActionInvokeAsync 未在卡片提交操作上触发
- java - 使用 Jersey 提供本地化错误响应
- r - 根据一个因素查找具有不完整集合的行,然后用 NA 替换不完整集合中存在的值
- flutter - 整个应用程序的通用导航侦听器
- kotlin - Kotlin ?.let + ?:run + CompletableFuture 意外行为
- r - 在 R 中导入具有非标准空白列的数据
- sql - Oracle 过程优化