gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:11:00 51 4
gpt4 key购买 nike

我使用以下代码,它适用于:

  • 加水印
  • 将(前卷、视频、后卷)转换为 .ts
  • 从新的 .ts 文件创建 concat txt 文件
  • 创建 mp4 输出

  • 变量
    $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
    $mark = "ffmpeg -y -i '".$video."' -i '".$watermark."' -filter_complex \"overlay=10:10\" '".$video_watermark."'";
    exec($mark);
    转换为 ts(视频传输流)
    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 文件
    $cmd = "echo \"file '".$input1."'\n";
    $cmd.="file '".$input2."'\n";
    $cmd.="file '".$input3."'\" > ".$convertfile;
    exec($cmd);
    创建输出 mp4
    exec("ffmpeg -f concat -safe 0 -y -i '".$convertfile."' -c copy -bsf:a aac_adtstoasc '".$newVideo."'");
    这有效,但需要很长时间。对于 1GB 或更大的 mp4,可能需要长达 3 小时?仅水印一项就需要 1 小时以上。我该如何优化这段代码?结合命令?我该如何解决?
    我尝试在生成下面的第二个.ts文件时添加水印,但不起作用,返回此错误 Streamcopy 请求输出流 0:0,它是从一个复杂的过滤器图提供的。过滤和流复制不能一起使用。 :
    exec("ffmpeg -y -i '".$video."' -i '".$watermark."' -filter_complex \"overlay=10:10\" -c copy -bsf:v h264_mp4toannexb -f mpegts '".$input2."'");

    最佳答案

    这一切都是为了水印?简单的答案是偷懒,避免为没有人会关心或注意到的水印做所有这些。
    无论如何,不​​需要.ts中间体。

  • 加水印:
    ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10:format=auto,format=yuv420p" -c:a copy main.mp4
    这是最耗时的步骤,因为添加水印需要过滤,而过滤需要编码。如果你想要更快的编码 use a faster -preset (但请确保与 preroll.mp4postroll.mp4 相比不会导致不同的属性)。
  • 制作 input.txt包含:
    file 'preroll.mp4'
    file 'main.mp4'
    file 'postroll.mp4'
  • concat demuxer 连接:
    ffmpeg -f concat -safe 0 -i input.txt -c copy -movflags +faststart output.mp4
    这假设所有输入都有 same attributes和流的数量。如果不是,则在连接之前通过过滤和重新编码来单独符合每个非标准输入,或者使用 concat filter而不是 How to concatenate videos in ffmpeg with different attributes? 中所示的 concat demuxer
  • 关于FFmpeg - 添加水印,concat 文件和输出 mp4,优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68817865/

    51 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com