【问题标题】:How to Batch Convert with FFmpeg 2 Pass?如何使用 FFmpeg 2 Pass 批量转换?
【发布时间】:2017-05-31 19:17:55
【问题描述】:

我正在使用 FFmpeg 将 webm 转换为 mp4。

我的批处理文件是

cd "C:\Users\Matt\Desktop\" && for %f in (*.webm) do ffmpeg -y -i "C:\Users\Matt\Desktop\%~f" -vcodec libx264 -b:v 600K -pass 1 -acodec aac -b:a 128k "C:\Users\Matt\Desktop\%~nf.mp4" && ffmpeg -y -i "C:\Users\Matt\Desktop\" -vcodec libx264 -b:v 600K -pass 2 -acodec aac -b:a 128k "C:\Users\Matt\Desktop\%~nf.mp4"

它适用于 CRF 和 1 Pass,但使用 2 Pass 它会在第二遍时停止并给出错误:

C:\Users\Matt\Desktop" -vcodec libx264 -b:v 600K -pass 2 -acodec aac -b:a 128k C:\Users\Matt\Desktop\video:参数无效

Path 缺少第一个双引号,文件名“video 01.mp4”被截断。

【问题讨论】:

  • 你确定第二遍中的-i参数是正确的吗?另外两次你使用它时,你已经指定了一个文件。在最后一个例子中,它似乎是一个目录 - 可能终端 \" 被解释为转义 -"
  • @Magoo 你是对的,第二个路径缺少 %~f。解决了,谢谢。
  • 2-pass 意思是第一遍的输出作为第二遍的输入,对吧?
  • @aschipfl 我现在不确定。在 wiki 上,它显示了用作两个通道的输入的原始源。 trac.ffmpeg.org/wiki/Encode/H.264#twopass
  • 啊,我明白了。你应该相信文档而不是我,我真的不知道ffmpeg,它只是我说的方式对我来说更合乎逻辑,但该工具似乎工作方式不同(我猜某处有一个临时文件保存收集的信息在第一次通过时)。很抱歉让您感到困惑!

标签: batch-file cmd ffmpeg command-prompt


【解决方案1】:

您的代码只能直接在 cmd 中运行,在批处理中,您必须将 for 变量的百分号加倍。
批量不需要一个衬管。
我希望这更清楚并且有效。

@Echo off
Pushd "C:\Users\Matt\Desktop\"
for %%f in (*.webm) do (
  ffmpeg -y -i "%%~f" -vcodec libx264 -b:v 600K -pass 1 -acodec aac -b:a 128k -f mp4 NUL 
  ffmpeg -y -i "%%~nf_tmp.mp4" -vcodec libx264 -b:v 600K -pass 2 -acodec aac -b:a 128k "%%~nf.mp4"
)
PopD
Pause

【讨论】:

  • 您的文件可以正常工作,但由于某种原因最终导致 FFmpeg 崩溃,但可能是我的视频。我还尝试将代码复制粘贴到没有 .bat 文件的 CMD 中。你看到我的代码中的错误了吗?
  • @MattMcManis 好吧,我不是 ffmpeg 专家,参数选择取决于你。
  • 是否必须使用 %~nf_tmp.mp4 或者我可以使用与 -pass 1 %%~f 相同的输入文件作为 -pass 2 吗?
  • @LotPings 您可以将"%%~nf_tmp.mp4" 替换为-f mp4 NUL,因为第一遍不需要输出实际文件,因此它可能会更快。在极少数情况下,我使用两遍编码我在第一遍中省略了音频,因为没有必要对它进行两次编码(你可以用-an 替换-acodec aac -b:a 128k 来做到这一点),但是通过省略它,有些人声称他们得到某种错误...我从未复制过。
  • @LotPings 当然。已编辑。
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 2015-03-01
  • 2019-08-02
  • 2013-04-15
  • 2021-05-01
  • 2023-03-30
  • 2017-09-27
  • 2015-04-20
相关资源
最近更新 更多