打烊~~ 2021-07-22 10:42 采纳率: 0%
浏览 256
已结题

ffmpeg录制视频时,由于视频尾部截取不当,而导致没有视频时长问题。

个人采用Java语言,通过Runtime.getRuntime().exec()开启一个子进程,执行ffmpeg的录像命令,命令为:ffmpeg -i 视频流地址 -c copy -f segment -strftime 1 -segment_time 20 视频保存的位置\1_20210722101044.flv 。
当用户选择录像时,调用该命令,选择结束录像时,调用Runtime.getRuntime().exec()返回的process对象的destroy()方法结束进程。但由于该方法直接销毁进程,因此导致视频的尾部有问题。
1、在解决过程中,我尝试调用process对象的waitFor()方法,暂停进程,但由于waitFor()方法在未完成任务时处于阻塞状态,我的视频流地址又是从线上直接拉取的,线上视频一直处于推流状态,因此导致该方法一直处于等待状态。
2、考虑到等待问题,我再调用waitFor()方法之前,获取process对象的输入、输出流,进行关闭操作,但该操作似乎不能对子进程进行断流,因此并没有什么效果。

目前考虑采用ffmpeg的命令,每隔一秒保存一次视频信息,但我百度了好长时间,没有找到相关命令。

下面是部分代码:
1、开始录制视频
img
2、终止录制视频

img

  • 写回答

1条回答 默认 最新

  • 打烊~~ 2021-07-23 10:45
    关注

    两种解决方式
    1、通过信号处理的方式写一个对视频进行每秒爆粗的命令,但是这个我不太清楚,所以没采用。
    2、将录制的视频进行转码操作,视频的尾部处理不当是因为将子进程销毁而导致的,并非是因为视频录制不当导致的,因此重新转码即可解决本问题。这里将录制的flv转为mp4格式。" ffmpeg -i "+旧的视频位置+" -vcodec copy -f mp4 "+新的视频位置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月31日
  • 已采纳回答 7月23日
  • 创建了问题 7月22日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效