【问题标题】:Adding watermark to a video by using ffmpeg in php在 php 中使用 ffmpeg 为视频添加水印
【发布时间】:2020-12-16 20:37:01
【问题描述】:

我创建了一个包含一组图像和 mp3 的视频。 但我想在该视频中添加水印文本。我正在使用以下代码添加文本。

exec('/usr/local/bin/ffmpeg -y -i output.mov -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/usr/bin/DejaVuSerif-BoldItalic-webfont.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi');

这个问题是创建的视频文件大小为零。 任何人都可以帮助我。 或者建议我使用任何其他命令向视频添加水印文本。 提前谢谢你...

【问题讨论】:

  • 控制台上的那个命令有效吗?
  • 我不确定,但它在 php 中工作正常。
  • 不确定我是否和你在一起。如果它在 PHP 中工作,问题是什么? :)
  • 创建 0 大小视频的命令。我不确定它是否可以在控制台中使用,因为我没有在控制台中尝试过。
  • 那么,就不能在 PHP 中工作了。好的,冒着明显的风险,在控制台上试试?

标签: php video ffmpeg


【解决方案1】:
ffmpeg -i movie.mp4 -i logo.png -filter_complex overlay output.mp4

【讨论】:

    【解决方案2】:

    我正在使用 php-ffmpeg [下面:Composer Json]:

    {
        "require": {
            "php-ffmpeg/php-ffmpeg": "^0.6.1"
        }
    }
    

    并且使用这个 php-ffmpeg 库,您可以使用以下代码添加水印:

    <?php
    
    function processVideo($videoSource,$reqExtension, $watermark = "")
    {
        $ffmpeg = FFMpeg\FFMpeg::create();
    
        $video = $ffmpeg->open($videoSource);
    
        $format = new FFMpeg\Format\Video\X264('libmp3lame', 'libx264');
    
        if (!empty($watermark))
        {
            $video  ->filters()
                    ->watermark($watermark, array(
                        'position' => 'relative',
                        'top' => 25,
                        'right' => 50,
                    ));
        }
    
        $format
        -> setKiloBitrate(1000)
        -> setAudioChannels(2)
        -> setAudioKiloBitrate(256);
    
        $randomFileName = rand().".$reqExtension";
        $saveLocation = getcwd(). '/video/'.$randomFileName;
        $video->save($format, $saveLocation);
    
        if (file_exists($saveLocation))
            return "http://localhost/test/video/$randomFileName";
        else
            return "http://localhost/test/thumb/404.png";
    
    }
    
    echo $videoLocation =  processVideo("sample.mp4","mp4","favicon.png");
    
    ?>
    

    [请根据您的需要更新位置。]

    【讨论】:

      【解决方案3】:

      命令:

          ffmpeg -i input.mp4 -i watermark.png -filter_complex 'overlay' output.mp4
      

      在您的控制器中尝试此代码。

        public function setWaterMark(Request $request_body){
            try {
              $watermark = Input::file('watermark');
              $input = Input::file('input');
      
              ffmpeg = "C:\\ffmpeg\\bin\\ffmpeg";
              $cmd = $ffmpeg . " -i " . $input . " -i " . $watermark . " -filter_complex 'overlay' " . $output_file;
              exec($cmd, $output);
      
              return $output_file;
        }
      

      【讨论】:

      • 这很有效,但是我们如何设置水印图像的位置。例如。我必须将其设置在右上角。我们该怎么做?谢谢。
      【解决方案4】:
      $ffmpeg = FFMpeg\FFMpeg::create();
      $video = $ffmpeg->open('video.mpg');
      $video
          ->filters()
          ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
          ->synchronize();
      $video
          ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
          ->save('frame.jpg');
      $video
          ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')
          ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')
          ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');
      

      在系统上安装 FFmpeg 的步骤。 http://drupalasia.com/article/how-add-watermark-video-using-php-and-ffmpeg

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        • 2021-11-23
        • 2020-03-13
        • 2020-11-21
        相关资源
        最近更新 更多