gpt4 book ai didi

windows - 如何从标准输出设置逗号分隔值?

转载 作者:行者123 更新时间:2023-12-04 23:26:04 25 4
gpt4 key购买 nike

我有一个处理 ffprobe 查询输出的批处理文件。它检索我用来确定某些 ffmpeg 指令的几位数据。特别是如果视频帧高度为 720 或更高,我会将 h264 视频转换为 h265。我还将音频流转换为 aac,如果它还没有,并且如果该流高于 128 kbps,我将其转换为 128。

我可以通过多次调用 ffprobe 并使用 if 语句来决定我的 ffmpeg 命令是什么来完成所有这些工作。

我希望我的批处理文件更有效率,所以我在想,如果我可以获取一个(可能是两个)ffprobe 查询的输出,然后将该输出粘贴到 for/f token=.... 循环中,那么我可以将每个 ffprobe 数据点设置为一个变量,然后只需检查变量以确定生成的 ffmpeg 命令将是什么。

这是我现在只需检查视频流是否为 hevc 的内容。如果不是,则 ffmpeg 将视频转换为 hevc 并将音频复制到 aac。

for %%a in ("*.*") do (
ffprobe -v quiet -show_entries stream=index,codec_name,height -of csv "%%a" 2>&1 | findstr "hevc"
if errorlevel 1 (
ffmpeg.exe -hwaccel cuvid -i "%%a" -pix_fmt p010le -c:v hevc_nvenc -preset slow -rc vbr_hq -b:v 4M -maxrate:v 10M -c:a aac "%%~na.h265-convert.mp4"
))

ffprobe 查询输出如下所示:
stream,0,h264,480

我在想是否可以使用以下内容标记该输出:
for /f "tokens=1,2,3,4 delims= " %%a in ("______") do set codec=%%b&set fheight=%%d

我不知道在我有_______的地方放什么。我真的不想创建一个临时文件,除非那是唯一的选择。

1)这是实现我想要做的有效方法吗?

2) 如果我在 ________ 上方有一个空行来调用 ffprobe 查询的输出以在我的 for 循环中使用,我应该使用什么?

最佳答案

for /f "tokens=1,2,3,4 delims= " %%a in (
'ffprobe -v quiet -show_entries stream=index,codec_name,height -of csv "%%a" 2^>^&1 ^| findstr "hevc"'
) do set codec=%%b&set fheight=%%d

应该执行 ffprobe您在 for 中指定的命令陈述。
, 可能还需要用插入符号 ^ 转义.

插入符号对重定向器字符进行转义,以便它们被接受为要执行的命令的一部分,而不是 for。本身。

要执行命令,请将其括在 'single quotes'

鉴于您建议的输出,我看不出它会通过 findstr筛选 hevc因为它不包含 hevc .此外,你提到的输出是逗号分隔的,所以 delims选项应该是 ,而不是 Space

for /?从文档提示中 - 以及关于 SO 的数千个示例。

关于windows - 如何从标准输出设置逗号分隔值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com