首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFmpeg -添加水印,连接文件和输出mp4,优化?

FFmpeg -添加水印,连接文件和输出mp4,优化?
EN

Stack Overflow用户
提问于 2021-08-17 13:03:20
回答 1查看 380关注 0票数 0

我使用以下代码,该代码用于:

  1. 加水印
  2. 将(预录制的、视频的、后置的)转换为.ts
  3. 从新的.ts文件创建concat txt文件
  4. 创建mp4输出

变量

代码语言:javascript
复制
$filePath = '/home/mywebsite/public_html/assets/videos/';
$convertfile = $filePath.'convert-videos-2.txt';
$watermark = $filePath.'watermark.png';
$preroll = $filePath.'preroll.mp4';
$video = $filePath.'Video.mp4';
$video_watermark = str_replace(".mp4","-watermark.mp4",$video);
$newVideo = $filePath.'Video-New.mp4';
$postroll = $filePath.'postroll.mp4';
$input1 = $filePath.'input1.ts';
$input2 = $filePath.'input2.ts';
$input3 = $filePath.'input3.ts';

向原始mp4添加水印

代码语言:javascript
复制
$mark = "ffmpeg -y -i '".$video."' -i '".$watermark."' -filter_complex \"overlay=10:10\" '".$video_watermark."'";
exec($mark);

转换为ts (视频传输流)

代码语言:javascript
复制
exec("ffmpeg -i '".$preroll."' -c copy -bsf:v h264_mp4toannexb -f mpegts '".$input1."'");
exec("ffmpeg -i '".$video_watermark."' -c copy -bsf:v h264_mp4toannexb -f mpegts '".$input2."'");
exec("ffmpeg -i '".$postroll."' -c copy -bsf:v h264_mp4toannexb -f mpegts '".$input3."'");

创建带有新.ts文件的级联txt文件

代码语言:javascript
复制
$cmd = "echo \"file '".$input1."'\n";
$cmd.="file '".$input2."'\n";
$cmd.="file '".$input3."'\" > ".$convertfile;
exec($cmd);

创建输出mp4

代码语言:javascript
复制
exec("ffmpeg -f concat -safe 0 -y -i '".$convertfile."' -c copy -bsf:a aac_adtstoasc '".$newVideo."'");

这是可行的,但要用很长时间。对于1GB或更高的mp4,最多需要3个小时?单是水印就需要1小时以上。如何优化这段代码?合并命令?我该怎么解决?

我尝试在生成下面的第二个.ts文件时添加水印,但不起作用,返回请求输出流0:0的错误流,这是从一个复杂的过滤器图输入的。过滤和流复制不能一起使用.

代码语言:javascript
复制
exec("ffmpeg -y -i '".$video."' -i '".$watermark."' -filter_complex \"overlay=10:10\" -c copy -bsf:v h264_mp4toannexb -f mpegts '".$input2."'");
EN

回答 1

Stack Overflow用户

发布于 2021-08-17 17:10:15

这些都是水印吗?简单的答案是懒惰,避免做所有这些水印,任何人都不会关心或注意到。

无论如何,不需要.ts中间体。

  1. 添加水印: -i input.mp4 -i watermark.png -filter_complex "overlay=10:10:format=auto,format=yuv420p“-c:a copy main.mp4 这是最耗时的一步,因为添加水印需要过滤,过滤需要编码。如果您希望更快地编码-preset (但要确保这不会导致与preroll.mp4postroll.mp4不同的属性)。
  2. 使input.txt包含: 文件'preroll.mp4‘文件'main.mp4’文件'postroll.mp4‘
  3. 凹式破碎机连接: ffmpeg -f concat -safe 0 -i input.txt -c -movflags +faststart output.mp4 这假设所有输入都有相同属性和流的数量。如果没有,则在级联之前,通过过滤和重新编码来单独调整每个非标准输入,或者使用级联滤波器代替如何将不同属性的视频连接在ffmpeg?中所示的级联演示器。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68817865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档