FFmpeg 在视频上应用滤色器

FFmpeg apply color filter on video

我是 FFmpeg 的新手,我想对我的视频应用滤色器。我搜索了很多,根据我的发现 here 这个命令似乎是从 RGBA 矩阵应用颜色。例如:

colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131

但是 运行 完整命令:

" -i $videoPath
-i $waterMarkPath
-filter_complex [1:v]scale=iw*$scale:-1[v1],[0:v][v1]overlay=0:0[mark],
colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
-pix_fmt yuv420p
-map [mark]
-preset ultrafast  -crf 23
-y $outputPath " 

我有这个错误:

Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_colorchannelmixer_2

ERROR ON EXPORT VIDEO (CODE 1)

感谢您的帮助

What am I doing wrong here and why?

你的过滤器标签乱七八糟。您要求 ffmpeg 将 [mark] 输出到视频文件。但这会使 colorchannelmixer 的输出孤立。所有过滤器输出必须由其他过滤器使用或发送到输出文件。

您可以这样做:

" -i $videoPath
-i $waterMarkPath
-filter_complex [1:v]scale=iw*$scale:-1[v1];[0:v][v1]overlay=0:0,colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131[mark]
-pix_fmt yuv420p
-map [mark]
-preset ultrafast -crf 23
-y $outputPath " 

或依赖默认的 stream selection 行为:

" -i $videoPath
-i $waterMarkPath
-filter_complex [1:v]scale=iw*$scale:-1[v1];[0:v][v1]overlay=0:0,colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
-pix_fmt yuv420p
-preset ultrafast -crf 23
-y $outputPath " 

有关如何制作过滤图的概述,请参阅 FFmpeg Filtering Intro

Is it the right way to apply color filters on video?

是的,如果你想使用 colorchannelmixer。

There are another ways to do it?

是的,有很多filters与颜色有关。

How can I apply the filter only on the video or only on the watermark?

这取决于过滤器的顺序以及您向过滤器提供的输入。

仅在主视频上使用 colorchannelmixer:

" -i $videoPath
-i $waterMarkPath
-filter_complex [0:v]colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131[main];[1:v]scale=iw*$scale:-1[v1];[main][v1]overlay=0:0
-pix_fmt yuv420p
-preset ultrafast -crf 23
-y $outputPath "

仅水印颜色通道混合器:

" -i $videoPath
-i $waterMarkPath
-filter_complex [1:v]scale=iw*$scale:-1,colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131[v1],[0:v][v1]overlay=0:0
-pix_fmt yuv420p
-preset ultrafast -crf 23
-y $outputPath "