我正在执行以下命令以在视频上插入水印并以 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
如果我把它下载到我的本地机器上,那么它在播放器上播放得很好。
有语法问题吗?
最佳答案
输出格式不太对。这里有两个因素需要考虑:
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
.见 simple和 complex过滤以查看差异是什么。 -acodec copy
而不是重新编码。 关于php - ffmpeg mp4 视频无法在浏览器上的 html5 视频播放器上播放(格式损坏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27777444/