FFMPEG 在使用 h264 编码器进行转码时从原始视频中删除了可能损坏的帧

FFMPEG drops supposedly corrupt frames from original video while transcoding using h264 encoder

我正在使用 h264 优化 MP4 网页版。我有一个视频在最初的 1-2 秒内有一些据称损坏的帧。 (下方提供的框架)

关于转码使用:

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 转码器对同一视频进行编码,它实际上修复了这些帧(下面提供的帧):

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

已将视频转换为原始视频文件

ffmpeg -i VID_1550287359485.mp4 -vcodec copy -an -bsf:v h264_mp4toannexb raw2.h264
ffmpeg -framerate 24 -i raw2.h264  -c copy output-a.mp4

从 mp3 格式的视频中提取音频

ffmpeg -i VID_1550287359485.mp4 -b:a 192K -vn music2.mp3

解决音频和视频长度问题

ffprobe -i  music2.mp3  -show_entries  format=duration  -v quiet  -print_format json
ffprobe -i  output-a.mp4  -show_entries  format=duration  -v quiet  -print_format json
ffmpeg  -i music2.mp3 -filter:a atempo="0.827415438" new-latest2.mp3

逆时针旋转视频90度

ffmpeg -i output-a.mp4 -vf "transpose=2" output-new.mp4

合并视频和音频以制作输出文件

ffmpeg -i output-new.mp4 -i new-latest2.mp3 -c:v libx264 -c:a aac -strict experimental -shortest output-second.mp4