如何在另一个命令中使用命令的输出

How to use the output of a command in another

提问人:jaimepm 提问时间:11/17/2023 最后编辑:Compojaimepm 更新时间:11/18/2023 访问量:63

问:

我正在尝试编写一个批处理脚本,以使用 ,然后将它们重新组合到 mkv 中,但试图保留音频语言。ffmpeg

我有一个脚本可以完美地做到这一点,而无需考虑语言:

chcp 65001
for %%a in (*.mp4) do (
    "ffmpeg" -i %%a -c:v copy -bsf hevc_mp4toannexb "%%~na.h265" -c:a copy "%%~na.aac"
    del %%a
    "mkvmerge" -o "%%~na.mkv" "%%~na.h265" "%%~na.aac"
)

那个工作顺利。

我有另一个脚本,它输出音频语言来提供 mkvmerge 代码,我得到了这个:

chcp 65001
for %%a in (*.mp4) do (
    "mediainfo" --Output=Audio;%%Language/String2%%  "%%a"
)

我得到代码(、、等)。enjaes

问题是我不知道如何设置第二个脚本的输出以在第一个脚本中使用它。

我应该存储第二个的输出,命令是这样的:mkvmerge

"mkvmerge" -o "%%~na.mkv" "%%~na.h265" --language TID:(output from the other script) "%%~na.aac"

这样,每个新的 mkv 都会保留 mp4 中的原始音频语言。

我今天一直在寻找它,但我找不到我需要的答案。

PS:不要问我为什么需要这样,而不仅仅是直接将 mp4 重新转换为 mkv,我只需要这样。

顺便说一句,并且被双引号,因为它们不是我笔记本电脑中的环境变量,所以我只是将路径设置为exe的路径,并且其中有空格。ffmpegmediainfomkvmerge

批处理文件 cmd

评论


答:

1赞 Squashman 11/17/2023 #1

FOR /F 命令用于捕获命令的输出。这是未经测试的。

chcp 65001
for %%a in (*.mp4) do (
    FOR /F "delims=" %%G IN ('^""C:\MediaInfo\MediaInfo.exe" "--Output=Audio;[%%Language/String2%%]" "%%a"^"') DO (
        "mkvmerge" -o "%%~na.mkv" "%%~na.h265" --language TID:%%G "%%~na.aac"
    )
)

评论

0赞 jaimepm 11/17/2023
我试过了:但它不能正常工作。它只提取音频和视频。没有别的了。chcp 65001 for %%a in (*.mp4) do ( "ffmpeg" -i %%a -c:v copy -bsf hevc_mp4toannexb "%%~na.h265" -c:a copy "%%~na.aac" del %%a FOR /F "delims=" %%G IN ('"MediaInfo" --Output=Audio;%%Language/String2%% "%%a"') DO ( "mkvmerge" -o "%%~na.mkv" "%%~na.h265" --language TID:%%G "%%~na.aac" ) )
0赞 Squashman 11/18/2023
我没有你们的软件。因此,您必须使用我给您的附加命令进行测试,并查看 %%G 变量是如何出现的。只需在批处理文件中运行它,看看它输出了什么:FOR /F "delims=" %%G IN ('"MediaInfo" --Output=Audio;%%Language/String2%% "SomeFile.mp4"') DO echo Languages=%%G
0赞 jaimepm 11/18/2023
这是行不通的。mediainfo.exe 的路径中有空格,即使正确地双引号,它也会失败,完全按照您的建议。
1赞 Squashman 11/18/2023
如果搜索 StackOverFlow,您将在命令中看到大量成功使用 MediaInfo 的批处理文件。FOR /F
0赞 Squashman 11/18/2023
我下载并安装了您的软件。然后终于在网上找到了一个有多种语言的mp4。我重新阅读了您的问题和评论,我想我终于明白了您使用 MediaInfo 的问题是什么。请参阅更新的代码。