【问题标题】:Output to pipe and file at the same time even if pipe isn't accepting inputs即使管道不接受输入,也同时输出到管道和文件
【发布时间】:2018-12-13 03:27:27
【问题描述】:

所以,我为 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 上这样做。我怎样才能解决这个问题并让它写入文件,即使它无法写入管道,但同时写入两者而不是写入文件并尝试将其读回管道?

【问题讨论】:

    标签: bash ffmpeg cygwin


    【解决方案1】:

    您是否尝试过tee 与-p 选项?即使tee 无法写入其标准输出,它也会使tee 继续写入,这意味着如果ffmpeg 失败,它应该能够应对。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多