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

时间:2018-07-04 16:29:59

标签: 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上实现。我该如何解决这个问题,并且即使无法将其写入管道,也要同时写入两个文件,而不是同时写入文件并尝试将其读回管道,因此将其写入文件?

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用tee选项的-p?即使tee无法写入其标准输出,它也会使tee继续写入,这对您而言意味着ffmpeg失败时应该可以应付。

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