ffmpeg complex_filter 淡出不起作用

标签 ffmpeg

本质上,我想做的是将 a.mp4 与 b.mp4 连接起来,在整个视频持续时间内显示我的一组 %c.png 覆盖在顶部,并显示 d.png 覆盖在顶部,但仅显示 1 秒然后让它淡出。所有这些都有效,除了 d.png 保持覆盖并且永不淡出:

ffmpeg -i ./temp/a.mp4 -i media/b.mp4 -i media/splash/%c.png -i ./temp/d.png -y -filter_complex [0:v]scale=568x320,setpts=PTS-STARTPTS[v0];[1:v]scale=568x320,setpts=PTS-STARTPTS[v1];[2:v]scale=212:242,setpts=PTS-STARTPTS[v2];[3:v]trim=duration=0.5,fade=t=out:st=0:d=0.5[3:v];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[bg][a];[bg][v2]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v];[v][3:v]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v] -map [v] -map [a] -r 29.97 -vcodec libx264 -s 568x320 -flags +loop -b 400k -bufsize 4M -bt 256k -refs 1 -coder 0 -me_range 16 -subq 4 -partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 -level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec aac -strict experimental -ab 80k -ar 48000 -ac 2 -strict experimental -f mp4 -metadata:s:v:0 rotate=90 ./temp/1428723401371.mp4

颈须大人,我知道你在外面。我已经阅读了您关于使用complex_filter 淡入/淡出的stackoverflow 帖子几个小时了,但我所尝试的一切都没有成功。主啊,请接受以上内容,作为我对您的谦卑奉献,并帮助我在 1 秒后淡出 d.png。

最佳答案

试试这个:

ffmpeg -y -i a.mp4 -i b.mp4 -i c_%03d.png -loop 1 -i d.png -filter_complex \
"[0:v]scale=568:-2,setpts=PTS-STARTPTS[v0]; \
 [1:v]scale=568:-2,setpts=PTS-STARTPTS[v1]; \
 [2:v]scale=212:-1,setpts=PTS-STARTPTS[v2]; \
 [3:v]trim=duration=0.5,fade=t=out:st=0:d=0.5[v3]; \
 [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[bg][a]; \
 [bg][v2]overlay=(W-w)/2:(H-h)/2[bg2]; \
 [bg2][v3]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map "[a]" -c:v libx264 -preset fast -c:a aac -strict experimental \
-ab 80k -metadata:s:v:0 rotate=90 -movflags +faststart output.mp4
  • 避免在每个过滤器链中对输入和输出使用相同的链接标签:

    • 错误:[v3]filter0,filter1[v3]
    • 右:[v3]filter0,filter1[foo]
  • 添加 -loop 1 作为 d.png 的输入选项可以让淡入淡出按预期工作。否则它充当单个帧而不是连续流。默认情况下,overlay 将循环覆盖输入的最后一帧,这就是它停留在那里的原因。可以使用 eof_action 覆盖选项更改该行为。

  • 默认情况下 image file demuxer将为 c_%03d.png 使用 -framerate 25,因此您可能需要将其添加为输入选项,并使用适当的值来更改帧速率和持续时间特定输入。

  • 使用 x264 预设,而不是列出大量编码选项。请参阅FFmpeg Wiki: H.264 Encoding Guide .

  • 并非所有玩家都会关注视频流旋转元数据。

关于ffmpeg complex_filter 淡出不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573851/

相关文章:

android - 如何从以特定时间间隔分隔的 N 个连接的音频样本生成音频文件?

ffmpeg - ffmpeg 可以处理来自 FMS 的 rtmp 流吗?

ffmpeg:从 mp3 中删除 lame replaygain 标签

ffmpeg - 我可以在 MPEG TS 容器中拥有原始视频流吗

ffmpeg - 如何使用 ws_scale 逐片缩放 yuv 图像

FFMPEG 用于下载时失真的视频缩略图

ffmpeg - 如何为ffmpeg编写一个直接使用字幕流刻录字幕的过滤器

opencv - 如何处理 cv::VideoCapture 解码错误?

c# - 如何使用 FFMpeg 转码数据流 (C#)

ffmpeg - 如何将两个 ffmpeg 查询合并到一个管道?