打烊~~ 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日

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛