php - ffmpeg mp4 视频无法在浏览器上的 html5 视频播放器上播放(格式损坏)

标签 php ffmpeg html5-video codec

我正在执行以下命令以在视频上插入水印并以 mp4 格式输出,但 html5 视频播放器无法在浏览器上播放该格式。

$video_url = '../../../uploads/myvideo.mp4';
$watermarked = '../../../uploads/watermarked_video.mp4';
exec("ffmpeg -i $video_url -vf \"movie='sos.png', crop=iw:ih:0:0:dar [img]; [in] [img] overlay=(W-w)/2:(H-h)/2 [out]\" -vcodec mpeg4 -f avi $watermarked");  //creating water marked video

如果我把它下载到我的本地机器上,那么它在播放器上播放得很好。

有语法问题吗?

最佳答案

输出格式不太对。这里有两个因素需要考虑:

  • “容器格式”或“文件格式”,即整个文件的排列方式(例如 AVI、MOV/QuickTime、WebM、Ogg)
  • “编解码器”,这是用于压缩和解压缩容器内的视频和音频数据的算法。大多数文件将有两种编解码器:一种用于音频(例如 AAC、Vorbis、MP3、Opus),另一种用于视频(例如 H.264、VP8、Theora)。

  • ffmpeg 支持读写许多不同的格式和编解码器,VLC 播放器也是如此。 QuickTime 也有,但没有那么多。然而,浏览器更加挑剔。您将文件保存为浏览器不支持的“AVI”容器格式。你应该使用 libx264作为编解码器,它将输出 H.264 视频,并且比 mpeg4 更广泛使用和更可靠。它将输出 MPEG-4 Part 2 视频。

    尝试这个:
    $video_url = '../../../uploads/myvideo.mp4';
    $watermarked = '../../../uploads/watermarked_video.mp4';
    exec("ffmpeg -i $video_url -i sos.png -filter_complex \"[1:v]crop=iw:ih:0:0:dar [img]; [0:v] [img] overlay=(W-w)/2:(H-h)/2 [out]\" -map \"[out]\" -map 0:a -vcodec libx264 -acodec copy $watermarked");  //creating water marked video
    
  • 我删除了 -f参数,因为 ffmpeg 可以从输出文件扩展名推断格式。
  • 电影过滤器已从示例中删除,因为它不是必需的。
  • -vf在本例中被替换为 -filter_complex .见 simplecomplex过滤以查看差异是什么。
  • 本例中的音频为 stream copied-acodec copy而不是重新编码。
  • 关于php - ffmpeg mp4 视频无法在浏览器上的 html5 视频播放器上播放(格式损坏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27777444/

    相关文章:

    java - 在 C、PHP、java 中输出不同

    ffmpeg - FFMPEG H264 压缩预设会影响视频质量吗?

    javascript - 从流媒体视频中只下载音频?

    javascript - HTML5 视频 : canPlayType() is not working in safari

    html - 通过 CSS 的视频背景覆盖 Wordpress 上的页脚

    php - 表内搜索功能结果

    php - 如何为 WooCommerce 中的未登录用户禁用特定插件?

    php - Cookies的过期时间

    ffmpeg - ffplay 的 -t 选项不会停止播放

    php - 不等待完成就执行 ffmpeg 命令