Video 如何将不同帧分辨率的VP8曲目转换为h264
我有一个带有VP8曲目的.webm文件,由外部服务(TokBox存档)从WebRTC流中录制。流是自适应的,因此轨迹中的每一帧可能具有不同的分辨率。大多数播放器(在webkit浏览器中)使用曲目描述的视频分辨率(始终为640x480)并将帧缩放到此分辨率。Firefox和VLC播放器使用真实帧分辨率,分别更改视频分辨率 我想实现两个目标:Video 如何将不同帧分辨率的VP8曲目转换为h264,video,ffmpeg,tokbox,vp8,matroska,Video,Ffmpeg,Tokbox,Vp8,Matroska,我有一个带有VP8曲目的.webm文件,由外部服务(TokBox存档)从WebRTC流中录制。流是自适应的,因此轨迹中的每一帧可能具有不同的分辨率。大多数播放器(在webkit浏览器中)使用曲目描述的视频分辨率(始终为640x480)并将帧缩放到此分辨率。Firefox和VLC播放器使用真实帧分辨率,分别更改视频分辨率 我想实现两个目标: 在Internet Explorer 9+中播放此视频,无需额外安装插件 将帧分辨率更改为一个固定分辨率,这样视频在不同的浏览器中看起来会完全相同 因此,我的
- 将源webm文件中的帧提取为具有真实帧分辨率(例如PNG或BMP)的图像(我如何做到这一点?)
- 查找图像的最大宽度和最大高度
- 为图像添加黑色填充,这样较小的帧将位于新帧的中心(大小为MAX_WIDHTxMAX_HEIGHT)
- 使用ffmpeg将图像合并到h264曲目
ffprobe -show_entries frame=width,height -of compact=p=0:nk=1 video.webm
您将得到如下输出:
1254|800
1058|800
890|800
774|800
672|800
左栏为每帧的实际宽度,右栏为高度。然后可以检查每列中的最大值,以用于画布大小
然后跑
ffmpeg -i video.webm -vf pad=MAXW:MAXH:(MAXW-iw)/2:(MAXH-ih)/2 out.mp4
其中MAXW和MAXH应替换为您发现的值。如果您运行
ffprobe -show_entries frame=width,height -of compact=p=0:nk=1 video.webm
您将得到如下输出:
1254|800
1058|800
890|800
774|800
672|800
左栏为每帧的实际宽度,右栏为高度。然后可以检查每列中的最大值,以用于画布大小
然后跑
ffmpeg -i video.webm -vf pad=MAXW:MAXH:(MAXW-iw)/2:(MAXH-ih)/2 out.mp4
其中MAXW和MAXH应替换为您发现的值。太好了!第一个命令真的很有意义。谢谢但是第二个有点不正确:
iw
和ih
在pad filter中,将从源视频的头部而不是当前帧返回分辨率。无论如何,谢谢!不,在这里可以很好地处理你的测试文件。升级您的ffmpeg。也许,我可以将pad过滤器应用于特定帧?嗯,我将尝试编译最新的3.1.3版本(WAS3.0.1)。谢谢我尝试了最新的ffmpeg版本,得到了同样的结果:棒极了!第一个命令真的很有意义。谢谢但是第二个有点不正确:iw
和ih
在pad filter中,将从源视频的头部而不是当前帧返回分辨率。无论如何,谢谢!不,在这里可以很好地处理你的测试文件。升级您的ffmpeg。也许,我可以将pad过滤器应用于特定帧?嗯,我将尝试编译最新的3.1.3版本(WAS3.0.1)。谢谢我尝试了最新的ffmpeg版本,得到了相同的结果: