FFmpeg 多个命令(转换,然后合并)

FFmpeg 多个命令(转换,然后合并)

我有需要转换的文件 1.mp4、2.mp4、3.mp4 等

for %i in (*.mp4) do ffmpeg -y -i "%i" -vf scale=1280:720 -crf 17 -c:v libx265 "%~ni.mp4"

然后我连接

ffmpeg -f concat -safe 0 -i xmylist.txt -crf 17 -c copy x1.mp4

现在我想一步完成此操作但失败了

for %i in (*.mp4) do ffmpeg -y -i "%i" -vf scale=1280:720 -crf 17 -c:v libx265, -f concat -safe 0 -i xmylist.txt -crf 17 -c copy "%~ni.mp4"

如何正确地将两者融合在一起?我得到的错误是

选项 vf(设置视频过滤器)无法应用于输入 url xmylist.txt - 您正尝试将输入选项应用于输出文件或反之亦然。将此选项移到其所属的文件之前。解析输入文件 xmylist.txt 的选项时出错。打开输入文件时出错:参数无效

答案1

你有没有尝试过:

for %i in (*.mp4) do ffmpeg -y -i "%i" -vf scale=1280:720 -crf 17 -c:v libx265 "%~ni.mp4" & ffmpeg -f concat -safe 0 -i xmylist.txt -crf 17 -c copy "%~ni.mp4"

或者批量处理:

for %%i in (*.mp4) DO (

ffmpeg -y -i "%%i" -vf scale=1280:720 -crf 17 -c:v libx265 "%%~ni.mp4"

ffmpeg -f concat -safe 0 -i xmylist.txt -crf 17 -c copy "%%~ni.mp4"

)

尽管注意您正在尝试做的事情,但这样做是否好,因为您正在连接已经是单个文件的同一个文件?

由于不能在 for 循环中使用多组 (),因此这里可以使用 3 个批处理文件来解决:

您使用启动命令是因为如果您将其放入其中,它将运行两个批次并立即关闭。

第 1 批:

start "Batch2.bat"

start "Batch3.bat"

第 2 批:

for %%i in (*.mp4) DO ffmpeg -y -i "%%i" -vf scale=1280:720 -crf 17 -c:v libx265 "%%~ni.mp4"

第 3 批:

for %%i in (*.mp4) DO ffmpeg -f concat -safe 0 -i xmylist.txt -crf 17 -c copy "x1.mp4"

请让我知道:)。今晚晚些时候我可以在家里研究更高级的 cmd 来帮助你解决这个问题。

相关内容