首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

ffmpeg 合并小米云台视频文件 (java生成)

  • 25-02-19 10:20
  • 4271
  • 5879
blog.csdn.net

1. 因为摄像头输出文件编码格式为 hevc 则需要把它转化为 h.264 格式在进行处理

命令: ffmpeg -i ./VID_20210818_201006.mp4 -map 0 -c:a copy -c:s copy -c:v libx264 ./0.mp4

 2. 需要再把 mp4 文件转化为 ts 文件在进行合并

命令: ffmpeg -i ./0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts ./0.ts

3. 再把 ts 文件合并为 mp4 文件 

命令:  ffmpeg -i "concat:./0.ts|./1.ts|./2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

4. 如果需要分离音频和视频则需要在处理 

仅提取视频: ffmpeg -i output.mp4 -vcodec copy -an ext_video.mp4

仅提取音频: ffmpeg -i output.mp4 -acodec copy -vn ext_audio.m4a

如果需要吧m4a格式的音频转为mp3 则在转化一下就好

m4a ffmpeg -i ext_audio.m4a ext_audio.mp3

java代码生成脚本文件:  

  1. package com.orion;
  2. import org.junit.Test;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. /**
  6. * @author Jiahang Li
  7. * @version 1.0.0
  8. * @since 2021/11/18 23:40
  9. */
  10. public class Ffmpeg {
  11. @Test
  12. public void generatorConvert() throws Exception {
  13. // 获取视频文件夹
  14. File dir = new File("F:\\1yyp");
  15. // 读取文件夹内要转换的文件
  16. File[] files = dir.listFiles((n) -> n.getName().endsWith(".mp4"));
  17. String convertCommandTemplate = "ffmpeg -i ./%s -map 0 -c:a copy -c:s copy -c:v libx264 ./convert_%d.mp4";
  18. StringBuilder sb = new StringBuilder();
  19. // 拼接转换命令
  20. for (int i = 0; i < files.length; i++) {
  21. sb.append(String.format(convertCommandTemplate, files[i].getName(), i)).append("\n");
  22. }
  23. // 生成转换脚本
  24. FileOutputStream out = new FileOutputStream(new File(dir, "convert.cmd"));
  25. out.write(sb.toString().getBytes());
  26. out.flush();
  27. }
  28. @Test
  29. public void generatorConcat() throws Exception {
  30. // 获取视频文件夹
  31. File dir = new File("F:\\1yyp");
  32. // 读取文件夹内要转换的文件
  33. File[] files = dir.listFiles((n) -> n.getName().startsWith("convert") && n.getName().endsWith(".mp4"));
  34. String convertTsCommandTemplate = "ffmpeg -i ./%s -c copy -bsf:v h264_mp4toannexb -f mpegts ./ts_%d.ts";
  35. StringBuilder sb = new StringBuilder();
  36. // 拼接转换命令
  37. for (int i = 0; i < files.length; i++) {
  38. sb.append(String.format(convertTsCommandTemplate, files[i].getName(), i)).append("\n");
  39. }
  40. // 拼接拼接命令
  41. StringBuilder concatFiles = new StringBuilder();
  42. for (int i = 0; i < files.length; i++) {
  43. concatFiles.append("./ts_").append(i).append(".ts");
  44. if (i != files.length - 1) {
  45. concatFiles.append("|");
  46. }
  47. }
  48. sb.append("\nffmpeg -i \"concat:")
  49. .append(concatFiles.toString())
  50. .append("\" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4")
  51. .append("\n");
  52. // 生成转换脚本
  53. FileOutputStream out = new FileOutputStream(new File(dir, "concat.cmd"));
  54. out.write(sb.toString().getBytes());
  55. out.flush();
  56. }
  57. }

食用方法:

1. 修改代码文件夹路径

2. 先执行  generatorConvert() 方法 生成 convert.cmd 文件

3. 执行  convert.cmd 文件, 生成 h.264 格式的 mp4 文件

4. 执行 generatorConcat() 方法 生成 concat.cmd 文件

5. 执行 concat.cmd 文件, 进行 mp4 文件的合并 

6. 目录下的 output.mp4 就是合并后的文件

截图: 

本人的 ffmpeg 版本为 4.4.1

生成的 convert.cmd 文件

生成的 concat.cmd 文件 (有删减)

 

最后: 

 本人亲测可放心食用, 如果有什么问题可以联系我, 我们一起讨论, 感谢!

注:本文转载自blog.csdn.net的lijiahangmax的文章"https://blog.csdn.net/qq_41011894/article/details/121600689"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top