FFMPEG 视频连接和叠加

FFMPEG 视频连接和叠加

我想将两个ffmpeg命令合并为一个命令。我ffmpeg在 Android 应用程序中使用现成的二进制文件。我想连接.ts文件并叠加图像。

我正在使用以下命令:

  1. 连接.ts文件:

    String[] ffmpegcommand = {"ffmpeg", "-i","concat:"+input_file_path+"|"+input_file_path1, "-c", "copy", "-bsf:a", "aac_adtstoasc", output_file_path};
    
  2. 应用图像叠加效果:

    String[] ffmpegcommand = {"ffmpeg","-y" ,"-i", input_file_path,"-strict","experimental", "-vf","movie="+AppStaticData.BASE_FOLDER_PATH + File.separator + "watermarklogo.png"+" [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]", AppStaticData.BASE_FOLDER_PATH+"/" + output_file_path};
    

答案1

您可以使用一个命令执行此操作连接过滤器

ffmpeg -i input0.ts -i input1.ts -i input2.ts -i overlay.png -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[vv][a]; \
 [vv][3:v]overlay=W-w-10:10[v]" \
-map "[v]" -map "[a]" output.mp4
  • 使用-filter_complex代替-vf。请参阅文档解释一下两者的区别。另外,你不需要movie源过滤器。

  • 这会将叠加层放置在右上角,并带有 10px 的填充。请参阅其他放置位置的示例并阅读覆盖过滤器文档了解更多信息。

答案2

非常感谢 LordNeckbeard,但有一件事你可能认为他的解决方案不起作用,因为如果你复制和粘贴所有内容,它将不起作用。只需将其全部放在一行中,它就会像这样工作:

ffmpeg -i file1.mp4 -i file2.mp4 -i file3.mp4 -i watermark.png -filter_complex "[0:v]setpts=PTS-STARTPTS[v0]; [1:v]setpts=PTS-STARTPTS[v1]; [2:v]setpts=PTS-STARTPTS[v2]; [v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1[v][aout]; [v][3:v]overlay=W-w-10:10[vout]" -map "[vout]" -map "[aout]" output.mp4

相关内容