ffmpeg. 渲染具有透明背景的文件

ffmpeg. 渲染具有透明背景的文件

我有下一个轨道方案。我需要使用 ffmpeg 将该轨道渲染为一个轨道。

在此处输入图片描述

渲染后应该看起来像

在此处输入图片描述

我想使用下一个方案:

  1. 将轨道 001 渲染至文件。
  2. 将轨道 002 渲染至文件。
  3. 将轨道 002 叠加在轨道 001 上。

对于“曲目 001”,我可以将剪辑“连接”到一条曲目,没有任何问题。

但问题是我应该如何连接“Track 002”的剪辑?“空”位置必须是透明的,才能在第 3 步进行叠加。

我已经尝试使用透明色作为空白位置输入。但在覆盖步骤中,透明色不起作用。

ffmpeg -f lavfi -i [email protected]:s=1920x1080:r=25:d=1 \
    -i Clip004.mp4 \
    -i Rendered_track_001.mp4 \
    -filter_complex "[0:v] [1:v] xfade=transition=fade:duration=2:offset=0.5[trak]; \
                    [2:v][trak]overlay[out]" \
     -map "[out]" -c:v vp9 -c:a copy test.webm

我也尝试过像这样使用 alphaextract 和 alphamerge

ffmpeg -f lavfi -i [email protected]:s=1920x1080:r=25:d=1 \
    -i Clip004.mp4 \
    -i Rendered_track_001.mp4 \
    -filter_complex "[0:v] [1:v] xfade=transition=fade:duration=2:offset=0.5[out]; \
                    [out]alphaextract[alpha];[2:v][alpha]alphamerge[out1]" \
     -map "[out1]" -c:v vp9 -c:a copy test.webm

但它失败并出现错误

[AVFilterGraph @ 0x556557d3ce00] The following filters could not choose their formats: 
Parsed_alphaextract_1
Consider inserting the (a)format filter near their input or output.
Error reinitializing filters!
Failed to inject frame into filter network: Input/output error
Error while processing the decoded data for stream #2:0

任何帮助,将不胜感激。

答案1

有几个问题:

  • 看起来它没有产生透明的视频。 解决方案是使用过滤器,而不是:...-f lavfi -i [email protected]:s=1920x1080:r=25:d=1
    colorlavfi
    -filter_complex "[email protected]:s=1920x1080:r=25:d=1,format=rgba[transparent]

  • [2:v][alpha]alphamerge[out1]没有效果,因为vp9编解码器不支持透明度。
    要测试具有透明度的视频,我们可以使用libvpx-vp9编解码器和-pix_fmt yuva420p


很难说这是否正是你想要的,但我希望它接近:

ffmpeg -y -i Clip004.mp4 -i Rendered_track_001.mp4 -filter_complex "[email protected]:s=1920x1080:r=25:d=1,format=rgba[transparent];[0:v]format=rgba[v0];[transparent][v0]xfade=transition=fade:duration=2:offset=0.5,format=rgba[trak];[1:v][trak]overlay=shortest=1[out]" -map "[out]" -c:v vp9 -c:a copy test.webm


用于测试的 Buildid 合成输入:

由于您没有发布Clip004.mp4Rendered_track_001.mp4,我使用合成模式进行测试:

ffmpeg -y -f lavfi -i mandelbrot=size=1920x1080:rate=25 -video_track_timescale 25 -t 5 Clip004.mp4

ffmpeg -y -f lavfi -i testsrc=size=1920x1080:rate=25:duration=5 -video_track_timescale 25 Rendered_track_001.mp4

  • 注意:如果不添加-video_track_timescale 25,则会出现错误信息:

第一个输入链接主时间基 (1/25) 与相应的第二个输入链接 xfade 时间基 (1/12800) 不匹配

相关内容