解决ffmpeg合并视频后播放条拖不动,画面出错的问题

之前用ffmpeg拼接视频文件时,遇到一个问题,被师傅解决了,这是师傅写的文章:
https://juejin.im/post/5e9328ea6fb9a03c917fd8af

师傅用的MAC OS,而我用的windows 8
因此我按师傅的方法尝试了一下,同时也学到了不少

出错情况

使用ffmpeg将许多mp4文件合成一个mp4文件
错误提示:Non-monotonous DTS in output stream 0:0; previous: 21587350, current: 12740928; changing to 21587351. This may result in incorrect timestamps in the output file.

在播放生成的文件时发现,从某个时间点开始的十分钟,其画面都被前面的画面覆盖掉,只剩下声音是对的。

刚才查到一篇文章,讲的貌似就是这个问题的原理及解决方法,详细看:
https://iyn.me/i/post-32.html

解决过程

  1. 在待处理片段的目录下,打开git bash
$ for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done
  1. 后台打开记事本
$ notepad create_list.py &

编写如下脚本并执行:

f = open("list.txt",'w')
for i in range(2,33):
	f.write("file crypto1-1-" + str(i) + ".mts" +'\n')
$ python create_list.py
$ cat list.txt
  1. 执行合并操作
$  ffmpeg -f concat -i list.txt -c copy output.mp4

总结

这次提醒了我,以后要多用stackoverflow。师傅说他就是在stackoverflow查到的。

  1. ffmpeg

mp4转mts

ffmpeg -i xxx.mp4 -q 0 xxx.mts

这里 -q 0 好像是说 让输出的mts与之前的mp4保持VBR一致,总之填上就对了。

视频合并操作

ffmpeg -f concat -i list.txt -c copy output.mp4

list.txt中的内容形如:
file *.mp4/mts/…

  1. 文件名操作

"${f%.*}.mts" 这里$f{%.*} 是去掉文件名中 最后一个点及右边内容
更多文件名操作可以看:https://blog.csdn.net/jiezi2016/article/details/79649382

  1. bash后台方式跑命令

$ notepad create_list.py &
& 让notepad后台运行,让bash能够继续输入和执行命令,方便操作。原理好像是fork一个新进程去执行 notepad 。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值