如何用ffplay实现ffmpeg分屏视频效果并实时播放?
实时分屏预览解决方案(无需预转码)
你可以直接利用ffplay的滤镜支持,把你之前ffmpeg命令里的分屏逻辑直接移植过来,实现实时无等待的分屏播放,完全不需要生成中间文件。
核心命令
ffplay -i _20180114094126_flightvideo_cam1.mp4 -i _20180114094126_flightvideo_cam2.mp4 \ -filter_complex " \ [0:v]crop=1280:360:0:0[v0]; \ [1:v]scale=1280:-1,crop=1280:360:0:0[v1]; \ [v0][v1]vstack[v]" \ -map [v]
命令详解
这个命令完全对应你之前ffmpeg转码的分屏逻辑:
-i参数同时加载两个视频源,和转码命令一致filter_complex里的滤镜链和你之前的完全相同:- 对第一个视频(
[0:v])裁剪出1280x360的区域,输出为[v0] - 对第二个视频(
[1:v])先缩放宽度到1280(高度按比例自动调整),再裁剪出1280x360的区域,输出为[v1] - 通过
vstack把[v0]和[v1]垂直拼接成最终的分屏画面[v]
- 对第一个视频(
-map [v]指定只播放拼接后的视频流(如果需要处理音频,可以添加音频相关的滤镜或映射,比如-map 0:a或-map 1:a选择其中一个音频,或者用amix混合音频)
优化建议
如果遇到播放卡顿或延迟过高,可以尝试添加以下参数:
-fflags nobuffer:降低播放缓存,减少延迟-framerate 30:强制统一帧率(如果两个视频帧率不一致时有用)-preset ultrafast:进一步加快滤镜处理速度,适配低性能设备
对比原有工作流
原来的ffmpeg转码是先把处理后的视频编码写入文件,再播放;而ffplay是直接在解码后实时处理滤镜并渲染到屏幕,跳过了编码写入磁盘的步骤,所以能做到秒开分屏预览,完全不需要等待那3分钟的转码时间。
内容的提问来源于stack exchange,提问作者Mark Antonie
相关产品推荐
相关产品推荐

