Batch file 使用标题元数据作为输出文件名ffmpeg

Batch file 使用标题元数据作为输出文件名ffmpeg,batch-file,ffmpeg,Batch File,Ffmpeg,是否可以获取输入文件的标题元数据,并将其用作输出文件的文件名?我正在尝试对一系列视频文件进行编码,我想自动将剧集的名称附加到文件名中,但我对使用ffmpeg还是很陌生,谷歌搜索到目前为止还没有成功 我还试图编写一个对整个文件夹进行编码的批处理脚本,目前它看起来像for%%a in(“*.mkv”)do ffmpeg-I%%a-filter_complex”[0:v][0:s:1]overlay[subs];[subs]scale=960:720”-map 0:a:1-acodec copy-sn

是否可以获取输入文件的标题元数据,并将其用作输出文件的文件名?我正在尝试对一系列视频文件进行编码,我想自动将剧集的名称附加到文件名中,但我对使用ffmpeg还是很陌生,谷歌搜索到目前为止还没有成功

我还试图编写一个对整个文件夹进行编码的批处理脚本,目前它看起来像
for%%a in(“*.mkv”)do ffmpeg-I%%a-filter_complex”[0:v][0:s:1]overlay[subs];[subs]scale=960:720”-map 0:a:1-acodec copy-sn test.mp4


我应该用什么来代替“test.mp4”?

所以在Ilogan的帮助下,我设法找到了我想要的答案,尽管它实际上还不能正常工作,但我决定把我迄今为止找到的东西写在这里,一部分是为了我,另一部分是为了其他可怜的灵魂

因此,根据Ilogan的提示,我设法发现
ffprobe-v error-select_streams v:0-show_entries stream_tags=title-of csv=p=0“%%a”
确实有效,并返回编码在视频流中的标题元数据

下一步是在批处理文件中使用它作为变量,这已经被回答了好几次,但我也将在这里包括它: 您希望将命令包含在具有以下外观的for循环中:
for/F“delims=%%g in('ffprobe-v error-select_streams v:0-show_entries stream_tags^=title-of csv^=p^=0“%%a”)do(SET title^=%%g)
重要部分:一些教程显示的是“tokens=*”而不是“delims=”,这可能有效,但我认为delims在这里会更好。最重要的部分是命令包含一个等号,您需要使用插入符号
^
来转义并让命令行正确解析这些符号

剩下的问题是,我的脚本目前看起来像这样:

for %%a in ("*.mkv") do (
FOR /F "tokens=*" %%g IN ('ffprobe -v error -select_streams v:0 -show_entries stream_tags^=title -of csv^=p^=0 "%%a"') do (SET title=%%g)
ffmpeg -i "%%a" -filter_complex "[0:v][0:s:1]overlay[subs];[subs]scale=960:720" -map 0:a:1 -acodec copy -sn "%title%.mp4")) 
似乎windows正在运行文件中第一次出现的命令,而到那时title变量仍然是空的-因此,我得到了名为“.mp4”的文件,并且仍在研究如何处理该文件


编辑:好的,我发现您需要做的是将
setlocal enabledayedexpansion
放在开头,title变量需要用感叹号,而不是百分号,这样才能工作!我测试了它,它正确地创建了带有标题的文件。

我建议您将
test.mp4
替换为
“%%~na.mp4”
。此外,您还应将
-i%%a
更改为
-i“%%a”
。要获取标题元数据:
ffprobe-v error-show\u entries format\u tags=title-of csv=p=0 input。mp4
@llogan,问题是关于
ffmpeg
,OP没有提到有
ffprobe
,因为这是另一个第三方应用程序,他们需要先下载。你应该把这些事情说清楚。Piotr Adryan,你需要澄清一下,如果你说的是剧集的名称,那么这些基本上就是分配给mkv文件的名称(我的评论中假设的),或者是文件元数据本身的内部部分(洛根的评论)。@Compo
ffprobe
是FFmpeg的另一个工具。“一定要先下载”对我来说似乎是多余的。你应该给予OP足够的信任,让他们能够自己决定这些事情(这很明显)。使用
ffmpeg
以合理的方式获取标题元数据是不可能的。像这样的用法正是
ffprobe
的用途。我知道
ffprobe
是@llogan,它不是问题的一部分,或者它的标签,是一个单独的下载,OP没有提到它们。