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

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日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错