php封装多段mp4,解决ffmpeg将多段视频裁剪拼接后卡顿现象

博客讲述了在PHP中如何使用ffmpeg处理多段MP4视频,解决裁剪拼接后出现的卡顿现象。通过重新编码视频片段、及时清理子进程的输入流来避免死锁,并提供了合并TS流为MP4的解决方案。
摘要由CSDN通过智能技术生成

合并

将下载的ts流名称按照顺序记录在一个txt文件中,然后使用命令

ffmpeg.exe -f concat -i ./your.txt -c copy ./output.mkv

ffmpeg.exe -i output.mkv output.mp4

步骤:

将整段视频转成ts流

ffmpeg -y -i abc.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb abc.ts

发现无论是直接截取mp4或者ts,前三秒都是卡顿状态

解决:截取时先对视频重新编码,再截取,编码时长只是针对要截取视频片段的长度

ffmpeg命令:ffmpeg -ss 00:01:00 -t 140 -i Y天屠龙记2019-14.mp4 -c:v libx264 -c:a aac -strict experimental

-b:a 98k out2.mp4

问题:这种方式jvm会一直占用着几个视频

原因:调用命令行后,程序可能正常运行 一会后,然后程序block住,后台进程ffmpeg还没死。Runtime.exec()执行时JVM会产生一个子进程,该进程与JVM建立三个通道链接:标准输入,标准输出,标准错误。Java本地的系统对标准输入和输出所提供的缓冲池有限,所以错误的对标准输出快速的写入和从标准输入快速的读入都有可能造成子进程死锁。子进程的输出流,也就是JVM的输入流。子进程不断向控制台输出,如果Java没有把输入流及时清空,会导致缓存区满,导致死锁。

解决:解决办法就是及时清空输入流,开两个线程把process

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值