ffmpeg mp4视频没有在浏览器上的html5视频播放器上播放(损坏的格式)

时间:2015-01-05 10:19:13

标签: 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

如果我将它下载到我的本地机器,那么它在播放器上完美播放。

有语法问题吗?

1 个答案:

答案 0 :(得分:2)

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

  1. “容器格式”或“文件格式”,这是整个文件的排列方式(例如AVI,MOV / QuickTime,WebM,Ogg)
  2. “编解码器”,用于压缩和解压缩容器内的视频和音频数据的算法。大多数文件将有两个编解码器:一个用于音频(例如AAC,Vorbis,MP3,Opus),一个用于视频(例如H.264,VP8,Theora)。
  3. 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可以从输出文件扩展名中推断出格式。

    • 电影过滤器已从示例中删除,因为不需要它。

    • -vf在此示例中替换为-filter_complex。请参阅simplecomplex过滤,了解其差异。

    • 此示例中的音频为stream copied -acodec copy而不是重新编码。