ffmpeg - 将视频从 vp8 转换为 x264 输出具有不同长度的不同视频
问题描述
我有一个持续时间为 2m:39s 的 webm 文件(vp8 编解码器)
使用 ffmpeg -i video.webm 它说视频有 15fps
nput #0, matroska,webm, from 'video.webm': Metadata: encoder : Lavf54.17.3 Duration: 00:02:39.63, start: 0.000000, bitrate: 417 kb/s Stream #0:0: Audio: vorbis, 44100 Hz、立体声、fltp(默认) 流 #0:1:视频:vp8、yuv420p(渐进式)、320x240、SAR 1:1 DAR 4:3、15 fps、15 tbr、1k tbn、1k tbc(默认)
我尝试将设置转换为相同的帧速率并添加到 mp4 容器
$ x264 --output intermediate.264 --fps 15 --preset slow --bitrate 400 --vbv-maxrate 800 --vbv-bufsize 1600 --min-keyint 48 --keyint 48 --scenecut 0 --no-scenecut --pass 1 --video-filter "resize:width=426,height=240" video.webm
$ MP4Box -add intermediate.264 -fps 15 out.mp4
但是生成的文件 out.mp4 现在有 2m:57s 的持续时间
解决方案
当您从原始 .264 转储文件中生成 .mp4 文件时。
这是持续时间的简单计算:
原始帧数:2654
帧速率:每秒 15 帧
mp4 文件的持续时间:2654 /15 = 176.93333 秒 /60 = 2 分 56.93 秒 = ~ 2 分 57 秒
Webm 文件的音频数据可能少于视频帧。所以它的持续时间小于 mp4 文件。
推荐阅读
- r - 如何在 rshiny 中以 .csv 格式下载已编辑的数据框?
- php - 如何修复“1366 不正确的字符串值:'\xE5'
- c# - 检查 T 是否实现了接口并在填充接口属性后返回 T
- php - 格式化动态时间戳
- json - 带有 Rest API 的 IOS Swift 的正确 Json 结构
- c++ - C++:从文件中读取字符串和整数,并获得最大的数字
- angular - Angular 5:大文件上传问题。净::ERR_CONNECTION_RESET
- webpack - 使用 webpack 在 Vue PWA 中包含大型 js 依赖项
- networking - 了解 tshark 输出
- python - 将文本文件转换为 python 字典 - 一个键和多个值 - 排除一个字段