video - FFMPEG 在使用 h264 编码器进行转码时会从原始视频中丢弃据称损坏的帧

标签 video ffmpeg h.264 video-encoding amazon-elastic-transcoder

我正在使用 h264 来优化 Web 的 MP4。我有一个视频,它在最初的 1-2 秒内有一些据称损坏的帧。 (下方提供框架)Corrupt Frame As seen in VLC Media Player.
关于使用转码:

ffmpeg -i orig.mp4 -c:v libx264 -crf 25 -vf scale="-2:min(ih\,720)" -b:v 600K -g 90 -c:a libfdk_aac output.mp4
输出 MP4 丢弃了这些帧,我的输出开始时比原始视频延迟了大约 1 到 2 秒,因此导致输出视频的整体持续时间更短。
此外,大多数媒体播放器在播放时也会跳过这些帧(如 quicktime 播放器等)。但是 VLC 媒体播放器能够在不跳过这些帧的情况下播放此视频。
有没有办法不使用ffmpeg丢帧?如果可能的话,是否可以在视频中识别和修复这些帧?
注意:我尝试使用 AWS Elastic transcoder 对相同的视频进行编码,它实际上修复了这些帧(下面提供的帧):
Frame from video transcoded by Elastic Transcoder

Note: Original video can be found here - https://drive.google.com/file/d/0B9VkhR9Zu60ybXFDeno3RGpQTUE/view?usp=sharing Video transcoded by AWS Elsatic transcoder can be found here - https://drive.google.com/file/d/0B9VkhR9Zu60yWUVHQk5MTk05QVk/view?usp=sharing

EDIT1: As suggested by @Mulvya in comments, TS-transcoded video can be found here - (https://drive.google.com/file/d/0B9VkhR9Zu60yU0t6T0dMME9ZMmc/view?usp=sharing)

最佳答案

您的源视频有一些没有时间戳的帧。

在这种特殊情况下,提取到原始比特流然后转码可以工作:

ffmpeg -i orig.mp4 -c copy orig.264

ffmpeg -i orig.264 -i orig.mp4 -map 0 -map 1:a -c:v libx264 -crf 25 -vf scale="-2:min(ih\,720)" -b:v 600K -g 90 -c:a libfdk_aac output.mp4

关于video - FFMPEG 在使用 h264 编码器进行转码时会从原始视频中丢弃据称损坏的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45073023/

相关文章:

android - 如何在android中应用视频过滤?

facebook - 时间轴上的视频帖子无法在线播放

ffmpeg - 如何从文件中获取透视坐标以使用 ffmpeg 进行图像叠加?

ffmpeg - 使用 FFMPEG 解析 NAL 单元

android - h264 原始视频流格式

video - H.264 流媒体要求

flash - 在Flash SWF中播放YouTube视频

javascript - 如何制作过期/签名视频嵌入网址

c++ - 摆脱 FFmpeg 不存在的 PPS 错误

android - 使用JavaCV ffmpeg对帧进行两次编码(重复,h264格式)的最快方法?