繁体   English   中英

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

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

我正在使用h264来优化Web的MP4。 我有一个视频,在最初的1-2秒之内有一些可能损坏的帧。 (下面提供了框架) 损坏的帧如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转码器对同一视频进行编码: 由Elastic Transcoder转码的视频中的帧

注:原始视频可以在这里找到- https://drive.google.com/file/d/0B9VkhR9Zu60ybXFDeno3RGpQTUE/view?usp=sharing视频转码通过AWS Elsatic转码器可以在这里找到- https://drive.google.com /文件/ d / 0B9VkhR9Zu60yWUVHQk5MTk05QVk /视图?USP =共享

EDIT1:如@Mulvya在评论中所建议,可以在此处找到经过TS转换的视频-( 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM