ruby-on-rails - ffmpeg 视频分割少于 10 秒会产生黑色剪辑 - ubuntu 18.04 LTS
问题描述
我在 AWS EC2 服务器上使用 FFmpeg 版本 4.3-2~18.04.york0 进行视频分割,而我在不到 11 秒的时间内分割视频, output.mp4 给出了一个空白视频。我在本地 MAC 和 Ubuntu 19 上尝试过同样的事情,但效果很好。
ffmpeg -i input.mp4 -ss 00:01:10 -to 00:01:15 -c:v copy -c:a copy output.mp4
解决方案
这通常是因为您要提取的视频片段不包含任何I 帧(关键帧)。视频通常每 10 秒有一个关键帧,因此您的视频片段很可能没有任何关键帧,因为它的持续时间只有 5 秒。
使用视频编解码器副本 ( )有一些注意事项。-c:v copy
在您的情况下,不可能进行编解码器复制,因为您的视频片段没有任何关键帧,因此是空白视频。
要修剪没有关键帧的视频片段,您需要对其重新编码,即使用除 之外的其他视频编解码器选项copy
,例如-c:v x264
。为了保持质量,您可以将crf 设置为 17 或 18:
ffmpeg -i input.mp4 -ss 00:01:10 -to 00:01:15 -c:v x264 -crf 17 -c:a copy output.mp4
重新编码总是比编解码器复制慢得多,但由于持续时间只有 5 秒,重新编码应该不到一分钟(取决于 CPU)。
我不确定为什么您的原始命令在您的本地计算机上运行。这可能是由于 ffmpeg 的不同版本或不同的视频源(例如input.mp4
,在您的本地恰好有一个关键帧在时间戳范围内)。
推荐阅读
- javascript - React Error: Element Type is Invalid with named exports
- flutter - 如何知道用户何时按下返回页面?
- sql - 在 postgreSQL 中使用带有额外列的 GROUP_BY
- crm - GET 请求到 Wiseagent CRM 中的 REST API
- c++ - 当我可以从静态实现相同的目标时,为什么我需要使用动态内存分配?
- elasticsearch - Elasticsearch GET 查询未通过在 GET 调用中提及文档 ID 来返回结果
- javascript - 在 youtube 上添加带有 chrome 扩展名的覆盖按钮
- java - NullPointerException 将对象添加到 ManyToMany Relation Ship 时
- r - R中的ggmap - 在裁剪地图上保留谷歌版权信息
- reactjs - Index.js 在专门在 Windows 上构建后导入 .tsx 文件