ffmpeg视频剪辑视频长度问题,视频无声音,视频卡顿问题

-# 项目场景:

在项目中做视频剪辑,合并多个视频为一个视频时,会出现多种坑,如视频无法播放,视频时长不对,视频无声音,视频合并处卡顿等问题

1.合并多个mp4,调整速度后合并出现视频无法播放以及时长不符

version1.0视频合并命令
1.将所有的视频根据前端传递的参数进行视频切割,参数包括 startTime(开始剪辑时间),endTime(结束时间),mediaId(文件id),speed(加速倍数)
2. ffmpeg -i input.mp4 -codec copy -ss 00:00:00 -to 00:16:00 output.mp4 (根据meidiaId查出路径剪辑一段视频)
3. 判断是否加速,不加速,将output.mp4写入 filelist.txt中
4. ffmpeg -i output.mp4 -filter_complex [0:v]setpts=" + setptsStr + "*PTS[v];[0:a]atempo=" + videoTimeParam.getSpeed() + "[a] -map -[v] -map -[a] speed.mp4  (如果加速将output.mp4加速为speed.mp4,写入filelist.txt中,output.mp4不写入)
5. 循环多个视频
6. ffmpeg -f concat -safe -0 -i filelist.txt -c copy videocut.mp4  (视频合并)

原因分析:

视频未重新编码 -c copy 直接生成视频

2.视频无音效

https://blog.meathill.com/ffmpeg/how-to-ffmpeg-concatenating-video-lost-audio.html

原因分析:

ffmpeg默认第一个视频的音频,第一个无音频那么都没有

3.剪辑处卡顿

//为了避免视频时长问题,又不想重新编码,我采用将mp4格式转为ts
1.和第一部分一样,先使用ffmpeg命令将视频剪辑
2. 判断是否加速,不加速,将output.mp4写入 filelist.txt中
3.不加速将output.mp4转为ts文件:
	ffempg -i output.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output.ts
3.将ts文件写入filelist.txt文件中
4.加速,将output.mp4转为speed.mp4再转为ts文件
5.合并文件

原因分析:

ts文件合并解决了视频长度的问题,但是再视频剪辑处,丢失关键帧。所以造成视频合并处卡顿


解决方案:

视频关键帧技术进行视频剪辑
ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必准确。 通常来说,把 -ss 选项放在 -i 之前,会使用关键帧技术; 把 -ss 选项放在 -i 之后,则不使用关键帧技术。 如果要使用关键帧技术又要保留时间戳,可以加上 -copyts 选项:
ffmpeg -ss 00:00:01 -i input.mp4 -to 00:16:00 -vcodec copy -acodec copy -y out.mp4

4.补充 - 视频分割时间不精确

//如上述命令进行视频剪辑,合并视频后会发现视频合并处可能会出现重复的画面,
//这是因为在视频剪辑时,视频的关键帧可能不在这一秒,所以剪辑的时间不精确
//网上有很多处理命令:
1.加入 -accurate_seek 参数在-i的前面和-avoid_negative_ts 1 参数
ffmpeg -ss {0} -to {1} -accurate_seek -i {2} -codec copy -avoid_negative_ts 1 -y {3}

2.剪辑前调整关键帧 
ffmpeg -ss {0} -to {1} -i {2} -c:a copy -vcodec libx264 -keyint_min - -g 1 -y {3}

我是用上述都没有解决,ffmpeg命令顺序很有讲究,最终的结果命令是

ffmpeg -ss {0} -to {1} -i {2} -vcodec copy -acodec copy -strict -2 -keyint_min 2 -g 1 -y {3}

//-keyint_min 60 -g 60 -sc_threshold 0  -keyint_min为最小关键帧间隔
//-sc_threshold这个命令会根据视频的运动场景,自动为你添加额外的I帧,所以会导致你编出来的视频关键帧间隔不是你设置的长度

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值