我正在执行以下命令在视频上插入水印并以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
如果我将它下载到我的本地机器,那么它在播放器上完美播放。
有语法问题吗?
答案 0 :(得分:2)
输出格式不太正确。这里有两个因素要考虑:
ffmpeg支持读写许多不同的格式和编解码器,VLC播放器也是如此。 QuickTime也有,但不是很多。然而,浏览器更挑剔。您将文件保存为“AVI”容器格式,浏览器不支持。你应该使用libx264
作为编解码器,它将输出H.264视频,并且比输出MPEG-4 Part 2视频的mpeg4
更广泛使用和可靠。
试试这个:
$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可以从输出文件扩展名中推断出格式。
电影过滤器已从示例中删除,因为不需要它。
此示例中的音频为stream copied -acodec copy
而不是重新编码。