输出到文件时如何防止重复行?
ffmpeg.exe filename.mp4 -o filename.mkv >> output.log
.log文件将填充10多行进度:0%等等每个编码步骤
我如何防止这种情况,因此它只会写进度:0%一次然后等待进度1%等等?
答案 0 :(得分:1)
这是一个批处理代码,其中 FOR 从执行的命令的 STDOUT 和 STDERR 中读取每一行,并将其与先前的读取行进行比较。如果新读取的行与先前读取的行不同,则使用重定向运算符>>
将此行输出到文件。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
del output.log 2>nul
set "Line="
for /F "delims=" %%I in ('ffmpeg.exe filename.mp4 -o filename.mkv 2^>^&1') do (
if not "!Line!" == "%%I" (
set "Line=%%I"
echo !Line!>>output.log
)
)
endlocal
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
for /?
if /?
set /?
setlocal /?
另请阅读Microsoft有关Using Command Redirection Operators。
的文章 PS:我没有安装ffmpeg
因此无法在上面测试,也没有安装此工具的文档。但请看一下ffmpeg output parse in batch script,因为我认为您真正需要的是将写入 STDERR 的消息重定向到输出文件中:
ffmpeg.exe filename.mp4 -o filename.mkv 2>>output.log