ffmpeg -r 25 -i 348.mp4 -vcodec libx264 -s 640x360 -aspect 640:360 -f mp4 -r 25 out.mp4

转码成功!问题解决,视频不再丢失,视频中间编辑插入的静态图片也可以正常显示。

事后推测了一下原因,有待进一步确认,欢迎大拿解惑:

1 视频中插入了静态图片,静态图片存储的帧率很可能是1,或者至少也是和原视频25帧是不相同的。

2 视频是多个视频拼接的,不同的视频之间也很可能存在帧率不相同,所以导致以一个动态的帧率去读取视频后按统一帧率输出的时候出现问题。

后续再继续深入研究MP4的视频格式,以及视频信息是如果存储的,这里面要学习的东西太多了。

上篇说到解决的方法以及推测,这篇继续深入说说后来的一些发现

1、-r参数:

‘-r[:stream_specifierfps (input/output,per-stream)’

Set frame rate (Hz value, fraction or abbreviation).

As an input option, ignore any timestamps stored in the file and instead generate timestamps assuming constant frame rate fps.

As an output option, duplicate or drop input frames to achieve constant output frame rate fps.

作为输入选项,忽略任何存储在文件时间戳,而生成时间戳假设固定帧速率的fps。

这里特别注意一下: ignore any timestamps stored in the file,忽略任何存储在文件里的时间戳。实际上正是因为忽略原因时间戳,生成了新的时间戳,才保证了视频转码的成功。

2、-vf showinfo:查看视频帧详情滤镜

这个滤镜会将视频每一帧的详细信息都输出,在做视频详细分析的时候很好用,具体的参数信息可以参考FFmpeg官方文档:

http://ffmpeg.org/ffmpeg-filters.html#showinfo

当我把整个视频的showinfo信息都输出到文件里查看时,发现里重复的时间戳:

[Parsed_showinfo_0 @ 0x266c740] n:0 pts:0 pts_time:0 pos:324675 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:1 type:I checksum:A5217CD1 plane_checksum:[308C60A8 4FA1B85C A41363BE]
[Parsed_showinfo_0 @ 0x266c740] n:1 pts:1200 pts_time:0.04 pos:370498 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:CF15D48E plane_checksum:[CB69A1EF 637DBF49 5FAF7347]
[Parsed_showinfo_0 @ 0x266c740] n:2 pts:2400 pts_time:0.08 pos:373819 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:5974D3B6 plane_checksum:[53AAA123 0C00BF3F 976C7345]

[Parsed_showinfo_0 @ 0x266c740] n:8001 pts:1200pts_time:0.04 pos:193039178 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:82A44DE5 plane_checksum:[8C58E469 A22C2B6F BD6D3DFE]
[Parsed_showinfo_0 @ 0x266c740] n:8002 pts:2400 pts_time:0.08 pos:193044398 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:8D024E55 plane_checksum:[2F9BE463 CDA42BB3 0D943E30]
[Parsed_showinfo_0 @ 0x266c740] n:8003 pts:3600 pts_time:0.12 pos:193025293 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:P checksum:DD4E870A plane_checksum:[A54708BD 3AFD263D 26455810]

这个应该才是导致转码失败的核心问题,由于用编辑软件拼接的视频,没有很好地处理时间戳,导致视频出现了相同的时间戳,在转码的时候,后面部分重复时间戳的视频内容被丢弃,导致视频和音频不同步,视频转码后时间变短。而-r参数正好可以抛弃原有时间戳,生成新的时间戳,从而保证了转码的成功。

3、-vsync:对视频帧和时间戳处理的另外一个参数

‘-vsync parameter

Video sync method. For compatibility reasons old values can be specified as numbers. Newly added values will have to be specified as strings always.

‘0, passthrough’

Each frame is passed with its timestamp from the demuxer to the muxer.

‘1, cfr’

Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.

‘2, vfr’

Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.

‘drop’

As passthrough but destroys all timestamps, making the muxer generate fresh timestamps based on frame-rate.

‘-1, auto’

Chooses between 1 and 2 depending on muxer capabilities. This is the default method.

Note that the timestamps may be further modified by the muxer, after this. For example, in the case that the format option ‘avoid_negative_ts’ is enabled.

With -map you can select from which stream the timestamps should be taken. You can leave either video or audio unchanged and sync the remaining stream(s) to the unchanged one.

从官方文档里可以看到,使用-vsync drop同样可以得到跟-r参数一样的效果,实验了一下,果然也可以成功转码。并且这个参数可以有更大的自由度,可以使用不同的模式去控制视频帧。

但是以上的解决办法目前都遇到一个问题,就是在一个通用的转码命令里,在视频是可变帧率的情况下,以及视频实际帧率和容器里申明的帧率不一致的情况下,会导致转码后的视频帧率出现错误,还得进一步研究同样的识别和转码方案。



ffmpeg转码会声会影编辑的视频失败问题解决(续)相关推荐

  1. ffmpeg源码分析_ffmpeg音视频同步的几种策略

    在前面的文章中,我们介绍了播放器的视频渲染及音频渲染的相关知识,这些都是单独进行的,一旦在现实开发中将视频及音频结合在一起播放就会出现音视频不同步的问题. 下面我们就来分析一下如何解决音视频同步的问题 ...

  2. 会声会影X5捕获视频失败

    将SONY HDV 1080i DV所拍摄的磁带中的视频,导入到计算机中,电脑中安装了1394采集卡,并且安装了会声会影X5来采集视频. 在用会声会影捕获视频时,看以在预览中控制DV的播放,回放,前进 ...

  3. ffmpeg源码中ffplay音视频同步原理及实现

    音视频指南 文章目录 音视频指南 前言 一.音视频同步简单介绍? 二.基本概念解释 1.为什么需要视频压缩 2.什么是I帧.p帧.b帧 3.什么是DTS,PTS 4.其他概念解释 三.常用同步策略 四 ...

  4. FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频

    一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...

  5. linux 视频编辑 ffmpeg,ffmpeg转码视频真的好用!(ffmpeg的简单使用方法)

    说明 转码和编辑视频 今天用Android Studio(后面简称AS)里的模拟器给系统录屏,用来展示OpenGL可视化的东西,打算上传B站,后来发现AS只能保存webm格式和GIF格式的视频,并且文 ...

  6. java用ffmpeg转码_java运用FFMPEG视频转码技术.doc

    java运用FFMPEG视频转码技术 基于windows系统安装FFMPEG转码技术 软件特点: 被转视频基本不失真(支持超清.高清.标清): 转码速度比较现成转码软件快非常多(不管文件有多大,此软件 ...

  7. ffmpeg转码视频真的好用!(ffmpeg的简单使用方法)

    说明 笔者个人博客网站:https://hk-shao.github.io/ 最新文章和更新都会在这里 转码和编辑视频 今天用Android Studio(后面简称AS)里的模拟器给系统录屏,用来展示 ...

  8. 会声会影编辑html,会声会影视频声音编辑

    一段打动人的视频,往往离不开声音,特别是背景音乐,它似乎有一种渲染氛围的魔力,或欢快,或悲伤,时而高时而低的音量往往更能带动观众进入其场景中,那么我们自己也能制作出这么有魅力的视频吗?当然可以.会声会 ...

  9. php ffmpeg 转码mp4,PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件

    配置php.ini文件 file_uploads = on ;//是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_dir ;//文件上传至服务器上存储临时文件的地方,如果没 ...

最新文章

  1. mysql客户端如何创建用户_mysql的创创建用户阶段 开启客户端登录和授权阶段
  2. 34补1-2_3 HA Cluster基础及heartbeat实现HA
  3. 计算机项目管理报告,《软件项目管理》报告.doc
  4. 红黑树效率为甚恶魔是log_一文带你彻底读懂红黑树(附详细图解)
  5. 今天梦幻诛仙服务器维护多久,《梦幻诛仙》6月10日体验服务器维护公告
  6. bootstrap加载mysql数据库_bootstrap后台管理系统前后台实现(含数据库)
  7. Bootstrap 多级下拉菜单
  8. Linux内核协议栈- 创建socket:__sock_create函数调用关系
  9. 如何画ROC曲线和FROC曲线
  10. Android系统进程Zygote启动过程的源代码分析(3)
  11. UVa 1149 Bin Packing 【贪心】
  12. 广州电子厂房净化工程_医药厂房净化车间工程验收,怎么测定风速风量和换气次数?...
  13. 12.Nginx 功能
  14. Atitit attilax涉及到的大数据 数据分析 数据挖掘 ai人工智能的处理技术 目录 1.1. 大数据 机器视觉 图像处理 数据分析 数据挖掘 知识图谱 ai人工智能方面系列项目 1 2.
  15. 【Endnote】如何在参考文献前加编号 (1.2.3.等 或 [1] [2] [3]等)
  16. 火猴之中国色展示(firemonkey)
  17. 人民币首度超过美元!
  18. 计算机动漫学的什么软件,电脑动漫绘画哪个软件比较好?
  19. quagga命令行解析
  20. 科技论文的图题翻译,图例,图坐标轴

热门文章

  1. 概率论与数理统计学习笔记——6.3卡方、t和F分布
  2. 未清销售订单强制关闭尝试
  3. Python 数据分析师前景及待遇
  4. vscode编写前端页面像素大小不一致
  5. led显示屏的合理亮度是多少?
  6. 微信自动下载app(安卓跳转默认浏览器 苹果跳转苹果商店App Store)的实现教程尽在366API
  7. git合并分支产生冲突解决方案
  8. .NET 6 WTM layui发布到centos7,验证码不显示问题解决办法
  9. PS创建简单的图形,染色,裁剪
  10. 【VTK】VTK删除三维模型指定三角形面片