bash - 即使管道不接受输入,也同时输出到管道和文件

标签 bash ffmpeg cygwin

因此,我为 Cygwin 制作了一个使用 Windows 的 ImageMagick 和 FFmpeg 的脚本,但我不确定这里的结果是否也适用于 Linux 上的 bash。所以,脚本的作用是我有一些卡通视频文件,我正在使用 Waifu2x 将图像增强和放大到 4K,然后使用 ImageMagick 将其通过管道传输到 FFmpeg,它也用于将其大小调整为 3840x2160,以防万一分辨率略有不同。这是我为这个示例编写的一个小脚本,用于简化它输出到 FFmpeg 的方式,因为真正的脚本非常冗长和复杂。

#!/bin/bash
fun(){
convert out.png JPG:-|tee "$outfile"
}
fun|ffmpeg -f image2pipe -r 60 -i - -c:v libx265 -movflags +faststart "$outputfile"

现在,我注意到如果 FFmpeg 编码失败,函数会继续执行,但无法输出到 $outfile。 .我想要做的是让它能够在编码失败的情况下输出到该文件,因为我还将所有图像写入缓存文件夹以供 FFmpeg 在编码失败时运行,但我也想同时写入FFmpeg 和文件的管道。似乎正在发生的是命令 tee如果无法写入管道,则似乎拒绝写入文件。我不确定这种行为是否是有意的,和/或它是否也在 Linux bash 上这样做。我怎样才能解决这个问题并让它写入文件,即使它无法写入管道,但同时写入两者而不是写入文件并尝试将其读回管道?

最佳答案

你试过tee-p选项?它使 tee即使 tee 继续写作无法写入其标准输出,这在您的情况下意味着它应该可以应付 ffmpeg失败。

fun() {
        convert out.png JPG:- | tee -p "$outfile"
}

关于bash - 即使管道不接受输入,也同时输出到管道和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51177890/

相关文章:

windows - 在 Cygwin 中创建文件夹导致权限排序不正确,无法打开文件

bash - 来自 ls 结果的 mkdir

macos - 从 shell 脚本或命令行写入 Mac OS X 控制台日志

linux - 如何在/dev以外的其他目录中创建lvm卷

bash - 将数字字符串格式化为日期

java - Cygwin 编译错误 Problematic frame : # C [cygwin1. dll+0xd6d47] using JNI

c# - C# FFMPEG 我得到 MPEG2 和 MPEG4 格式的错误?

video - 如何将ffmpeg输出拆分为多个文件?

ffmpeg - 在哪里可以找到适用于 Windows Chromium(h.264、AAC、mp3..)的 ffmpeg 编解码器?

windows - 如何在 cygwin 中启动 Windows GUI 程序?