FFmpeg filter_complex ass字幕和水印不能一起使用

时间:2014-08-29 08:56:07

标签: video encoding ffmpeg video-processing

我一直在尝试一起为视频添加徽标和副标题。但我无法管理它。徽标正在成功添加。但输出视频中缺少字幕。徽标淡化效果也不起作用。

ffmpeg -i '. $dest .' -i /www/otoconv/logo.png -filter_complex \ "[0:v][1:v]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2:enable=between(t\,120\,130);[0:v]ass='.$ass_path.';[1:v]fade=out:st=30:d=1:alpha=1"  -c:v libx264 -crf 23 -preset ultrafast -threads 0  -c:a libfaac -movflags faststart '.$out

视频详情:

Duration: 00:44:51.44, start: 0.000000, bitrate: 2892 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709), 1280x720, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1: Audio: ac3, 48000 Hz, stereo, fltp, 384 kb/s (default)

当我开始编码时,ffmpeg输出就像这样

Output #0, mp4, to '/www/otoconv/media_subtitled/183502046hen.mp4':
Metadata:
encoder         : Lavf56.3.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc
Metadata:
  encoder         : Lavc56.0.101 libx264
Stream #0:1: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc
Metadata:
  encoder         : Lavc56.0.101 libx264
Stream #0:2: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv444p, 308x93 [SAR 1:1 DAR 308:93], q=-1--1, 25 fps, 12800 tbn, 25 tbc
Metadata:
  encoder         : Lavc56.0.101 libx264
Stream #0:3: Audio: aac (libfaac) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, s16, 128 kb/s (default)
Metadata:
  encoder         : Lavc56.0.101 libfaac
Stream mapping:
Stream #0:0 (h264) -> overlay:main (graph 0)
Stream #0:0 (h264) -> ass (graph 0)
Stream #1:0 (png) -> overlay:overlay (graph 0)
Stream #1:0 (png) -> fade (graph 0)
overlay (graph 0) -> Stream #0:0 (libx264)
ass (graph 0) -> Stream #0:1 (libx264)
fade (graph 0) -> Stream #0:2 (libx264)
Stream #0:1 -> #0:3 (ac3 (native) -> aac (libfaac))

在此过程中不会出现错误。提前谢谢。

注意:我必须使用ass字幕。

1 个答案:

答案 0 :(得分:0)

我想:

ffmpeg -i '. $dest .' -i /www/otoconv/logo.png -filter_complex \
"[1:v]fade=out:st=30:d=1:alpha=1[tmp_fade]; \
[0:v][tmp_fade]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2:enable=between(t\,120\,130)[tmp_overlay]; \
[tmp_overlay]ass='.$ass_path.'[out]" \
 -map [out] -map 0:a -c:v libx264 -crf 23 -preset ultrafast -threads 0  -c:a libfaac -movflags faststart '.$out

应该更好。基本上,您需要链接所有命令(从技术上讲,它是一个图形,您需要能够从所有进入的节点到达终端节点,但我不是数学家,因此可能缺乏此解释)。我不明白ffmpeg足以告诉你为什么你的命令没有失败,但从你的文件输出判断,我认为发生的事情是只有这个链才能进入最后的视频:

Stream mapping:
Stream #0:0 (h264) -> overlay:main (graph 0)
Stream #1:0 (png) -> overlay:overlay (graph 0)
overlay (graph 0) -> Stream #0:0 (libx264)

这两个得到计算,但它们丢失了:

Stream #1:0 (png) -> fade (graph 0)
Stream #0:0 (h264) -> ass (graph 0)

我没有运行这个例子,所以我希望没有错字。