我正在制作一个视频:
- 使用静止图像作为源
- 具有文本叠加
- 淡入和淡出
- 具有静音立体声音轨。
到目前为止,我有这个,它(几乎(工作正常:
ffmpeg -f lavfi -i "aevalsrc=0|0" -loop 1 -i turtle-2.jpg -c:v libx264 -t 5 -r 30 -s 1920x1080 -aspect 16:9 -pix_fmt yuv420p -filter:v drawtext="fontsize=130:fontfile=comic.ttf:text='hello world':x=(w-text_w)*.25:y=(h-text_h)*.75",fade=in:0:60,fade=out:90:60 -acodec aac turtle11.mp4
唯一的问题是淡出似乎不会变黑,即使这是一个 150 帧的视频,我相信我正确地遵循了 ffmpeg 文档。
生成的视频在这里:
http://video.blivenyc.com/vid-from-image/turtle11.mp4
有什么想法吗?
好吧,我不确定为什么,但这有效,即使它似乎是等效的:
ffmpeg -f lavfi -i "aevalsrc=0|0" -loop 1 -i turtle-2.jpg -c:v libx264 -t 5 -r 30 -s 1920x1080 -aspect 16:9 -pix_fmt yuv420p -filter:v drawtext="fontsize=130:fontfile=comic.ttf:text='hello world':x=(w-text_w)*.25:y=(h-text_h)*.75",fade=t=in:st=0:d=1,fade=t=out:st=4:d=1 -acodec aac turtle12.mp4
基本上,基于框架的语法:
淡入:0:60,淡入=出:90:60
替换为基于时间的:
淡化=t=输入:st=0:d=1,淡化=t=out:st=4:d=1
不知何故,它有效。不知道这是为什么。
入淡出滤镜操作的视频流长度不是 150 帧。这里的输入和输出帧速率不同。使用-r
设置输出速率发生在所有过滤完成后。在该阶段,ffmpeg 将丢弃或复制帧以获得输出速率。
除非另有明确设置,否则图像或图像序列的输入速率为 25。在您的命令中,由于没有覆盖,因此它是 25。因此,从第 90 帧开始淡出 60 帧,将在第 125 帧(5 秒 x 25(结束。FFMPEG 将复制每个输入秒的 5 帧以使其达到 30。
要获得所需的结果,请使用
ffmpeg -f lavfi -i "aevalsrc=0|0" -loop 1 -framerate 30 -i turtle-2.jpg -c:v libx264 -t 5 -s 1920x1080 -aspect 16:9 -pix_fmt yuv420p -filter:v drawtext="fontsize=130:fontfile=comic.ttf:text='hello world':x=(w-text_w)*.25:y=(h-text_h)*.75",fade=in:0:60,fade=out:90:60 -acodec aac turtle11.mp4