在另一个命令中使用 mediainfo 的输出作为变量
Posted
技术标签:
【中文标题】在另一个命令中使用 mediainfo 的输出作为变量【英文标题】:using output from mediainfo as variable in another command 【发布时间】:2017-02-15 11:00:43 【问题描述】:所以我正在尝试设置一种简单的方法来使用 bat 文件启动视频,并首先运行 Mediainfo 以获取视频的长度,以便它可以在播放完成后停止 vlc 或其他任何内容。
Complete name : C:\Users\Tyler\Desktop\Psych s05e11.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 116 MiB
Duration : 42 min 36 s
Overall bit rate : 382 kb/s
Writing application : Lavf55.13.102
这是我在 txt 文件中获得的 mediainfo 的输出,我试图从持续时间位中提取 42 和 36 并在另一个命令中使用它。我还应该补充一点,这些数字必须单独使用。谢谢!
编辑:感谢回复大家喜欢的帮助; 这是我现在要运行的内容:
mediainfo.lnk --Language=raw --Output=General;%Duration% "C:\Users\Tyler\Desktop\Psych s05e11.mp4"
输出是:
2556249
现在我需要一种方法来获取前四位数字并在另一个命令中使用它们,以某种方式将 2556 设为变量?
【问题讨论】:
您可以发布您尝试过的内容吗?你可以使用 FOR /F 和 FIND 来解决这个问题。 在我们提供解决方案之前,您需要了解一下您是如何执行 mediainfo 的。 【参考方案1】:如果您需要持续时间,请使用例如这个命令:
mediainfo "--Output=General;%Duration%" YourFileName.ext
一般来说,当你想到一些自动化时,更喜欢使用例如:
mediainfo -f --Language=raw YourFileName.ext
并选择更符合您需要的行,避免使用“/String”的字段,因为它们仅用于显示(而不是用于自动化)。
Jérôme,MediaInfo 的开发人员。
【讨论】:
我正在运行这样的命令:mediainfo --Language=raw --Output=General;%Duration% "filename.ext" >> "outputfile.txt" 我只得到我想要的持续时间,谢谢你的帮助! 这是我遇到的一个奇怪问题;当我像在最后一条评论中显示的那样从终端运行命令时,我得到了正确的输出,但是在批处理文件中使用完全相同的命令返回没有任何选项的输出,它运行为: mediainfo --Output=文件:\\file.txt“文件名.ext”。提供太多信息!我能做些什么来解决这个问题? 只是告诉你(作为开发者)你不应该在 CLI 版本的软件中使用%
作为 var 定义器。最好使用另一个字符,例如$
。反正很软!!
不是 MediaInfo 的问题,这是您的批处理中的问题:% 用于变量,您忘记对其进行转义。 mediainfo "--Output=General;%%Duration%%" %1
你说得对,我忘记了“字符串”,修改了我的答案,谢谢【参考方案2】:
好的,这就是我最后所做的,感谢所有帮助!
C:\mediainfo\MediaInfo.exe --Language=raw --Output=General;%%Duration%% "C:\Users\Tyler\Desktop\Psych_s05e11.mp4" >out.txt
set /p $Duration= <out.txt
set $Duration=%$Duration:~0,4%
echo Result = %$Duration%
del out.txt
pause
输出是:
C:\mediainfo\MediaInfo.exe --Language=raw --Output=General;%Duration% "C:\Users\Tyler\Desktop\Psych_s05e11.mp4" >out.txt
set /p $Duration= <out.txt
set $Duration=2556
echo Result = 2556
Result = 2556
del out.txt
pause
Press any key to continue . . .
把@echo 从那里拿走,这样你就可以看到它了
【讨论】:
【参考方案3】:使用FOR /F
@echo off
for /f "delims=" %%a in ('mediainfo "--Output=General;%%Duration%%" "C:\Users\Tyler\Desktop\Psych\s05e11.mp4"') do set $Duration=%%a
Echo %$Duration%
使用临时文件
@echo off
mediainfo.exe --Language=raw --Output=General;%%Duration%% "C:\Users\Tyler\Desktop\Psych s05e11.mp4" >out.txt
set /p $Duration= <out.txt
set $Duration=%$Duration:~0,4%
echo Result = %$Duration%
del out.txt
使用@Jérôme Martinez [raw -output] 想法的另一种方式。
没有临时文件,使用findstr
:
@echo off
for /f "tokens=2 delims=:" %%a in ('mediainfo -f --Language=raw "C:\Users\Tyler\Desktop\Psych s05e11.mp4" ^| findstr /i "duration"') do (
set $Duration=%%a
goto:next
)
:next
set $Duration=%$Duration:~1,4%
echo %$Duration%
【讨论】:
感谢您的帮助;似乎比我到目前为止的任何东西都近!但是回显输出是:Result = ~0,4 发现路径设置错误,现在找到了输出是:Result = Alte 好的,当您执行mediainfo.lnk --Language=raw --Output=General;^%Duration^% "C:\Users\Tyler\Desktop\Psych s05e11.mp4"
时,确切的输出是什么?在所有情况下,您最好直接在 .exe
上工作,而不是在 .lnk
如果我在终端中运行它,我会得到预期的 2556249,但如果我在 bat 文件中运行它,输出是 mediainfo 默认显示的大量内容,我将尝试使用exe文件代替
我使用 exe 文件而不是链接再次运行它,同样的输出,一长串我不需要的东西。但是,如果我自己执行该命令,它只会打印出 Duration以上是关于在另一个命令中使用 mediainfo 的输出作为变量的主要内容,如果未能解决你的问题,请参考以下文章
使用 MediaInfo 命令行和 jq 从文件目录构建有效的 JSON 播放列表
Python 2.7 mediainfo --inform 输出完整信息而不是一个字符串
Bash:无法通过 mediainfo 浏览目录中的所有文件