ffmpeg mp4 视频无法在浏览器的 html5 视频播放器上播放(损坏的格式)
ffmpeg mp4 video is not playing on html5 video player on browser (corrupt format)
我正在执行以下命令在视频上插入水印并输出为 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
如果我将它下载到我的本地机器上,那么它可以在播放器上完美播放。
有语法问题吗?
输出格式不太正确。这里有两个因素需要考虑:
- "container format" 或 "file format",这是整个文件的排列方式(例如 AVI、MOV/QuickTime、WebM、Ogg)
- "codec",这是用于压缩和解压缩容器内的视频和音频数据的算法。大多数文件将有两种编解码器:一种用于音频(例如 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
。请参阅 simple and complex 筛选以了解不同之处。
此示例中的音频将 stream copied 与 -acodec copy
而不是重新编码。
我正在执行以下命令在视频上插入水印并输出为 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
如果我将它下载到我的本地机器上,那么它可以在播放器上完美播放。
有语法问题吗?
输出格式不太正确。这里有两个因素需要考虑:
- "container format" 或 "file format",这是整个文件的排列方式(例如 AVI、MOV/QuickTime、WebM、Ogg)
- "codec",这是用于压缩和解压缩容器内的视频和音频数据的算法。大多数文件将有两种编解码器:一种用于音频(例如 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
。请参阅 simple and complex 筛选以了解不同之处。此示例中的音频将 stream copied 与
-acodec copy
而不是重新编码。