胡斌

readme

1 -========================================================================  
2 - 控制台应用程序:merge_av 项目概述  
3 -======================================================================== 1 +merge_av
  2 +
  3 +此应用程序读入3mang webrtc课堂录像信息文件,根据各音频视频文件的开始和结束时间,运行ffmpeg对音频文件进行切分,再与视频文件合成。对每段开始音频无视频对应部分,取下一段视频的第一帧图像重复。
  4 +各段音视频合成为ts文件后,再拼接。最后把拼接后的ts文件再重新转换时间戳。所有这些操作都是调用ffmpeg命令完成的,因此merge_av程序运行需要确保ffmpeg所在路径添加在系统执行路径环境变量里。
  5 +
  6 +运行示例:
  7 +merge_av uid_284176605_20171127113703805.txt
  8 +
  9 +其中uid_284176605_20171127113703805.txt内容如下:
  10 +0.000 284176605_20171127113703805.aac create
  11 +1.681 284176605_20171127113705486.webm create
  12 +1.682 284176605_20171127113705486.webm info width=320 height=240 rotation=0
  13 +24.933 284176605_20171127113705486.webm close
  14 +27.729 284176605_20171127113731534.webm create
  15 +27.730 284176605_20171127113731534.webm info width=320 height=240 rotation=0
  16 +859.989 284176605_20171127113731534.webm close
  17 +895.640 284176605_20171127115159445.webm create
  18 +895.641 284176605_20171127115159445.webm info width=320 height=240 rotation=0
  19 +961.164 284176605_20171127115159445.webm close
  20 +964.639 284176605_20171127115308444.webm create
  21 +964.640 284176605_20171127115308444.webm info width=320 height=240 rotation=0
  22 +2770.511 284176605_20171127115308444.webm close
  23 +2780.447 284176605_20171127113703805.aac close
  24 +
  25 +merge_av读入上述内容,解析后依次执行如下命令,最终生成dest.ts文件,是合成后是音视频文件,(各临时文件未删除,可在外部脚本里删除)
  26 +这些命令可以通过 "merge_av uid_284176605_20171127113703805.txt -p"输出查看(-p就是只打印命令,不执行) :
  27 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 0.000 -t 1.681 -acodec copy 0_284176605_20171127113703805.aac
  28 +ffmpeg -y -ss 0 -i 284176605_20171127113705486.webm -vframes 1 -f mjpeg -an 284176605_20171127113705486.webm.jpg
  29 +ffmpeg -y -loop 1 -i 284176605_20171127113705486.webm.jpg -i 0_284176605_20171127113703805.aac -loop 0 -shortest -acodec copy -vcodec libx26
  30 +4 0.ts
  31 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 1.681 -t 23.252 -acodec copy 1_284176605_20171127113703805.aac
  32 +ffmpeg -y -i 1_284176605_20171127113703805.aac -i 284176605_20171127113705486.webm -acodec copy -vcodec libx264 1.ts
  33 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 24.933 -t 2.796 -acodec copy 2_284176605_20171127113703805.aac
  34 +ffmpeg -y -ss 0 -i 284176605_20171127113731534.webm -vframes 1 -f mjpeg -an 284176605_20171127113731534.webm.jpg
  35 +ffmpeg -y -loop 1 -i 284176605_20171127113731534.webm.jpg -i 2_284176605_20171127113703805.aac -loop 0 -shortest -acodec copy -vcodec libx26
  36 +4 2.ts
  37 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 27.729 -t 832.260 -acodec copy 3_284176605_20171127113703805.aac
  38 +ffmpeg -y -i 3_284176605_20171127113703805.aac -i 284176605_20171127113731534.webm -acodec copy -vcodec libx264 3.ts
  39 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 859.989 -t 35.651 -acodec copy 4_284176605_20171127113703805.aac
  40 +ffmpeg -y -ss 0 -i 284176605_20171127115159445.webm -vframes 1 -f mjpeg -an 284176605_20171127115159445.webm.jpg
  41 +ffmpeg -y -loop 1 -i 284176605_20171127115159445.webm.jpg -i 4_284176605_20171127113703805.aac -loop 0 -shortest -acodec copy -vcodec libx26
  42 +4 4.ts
  43 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 895.640 -t 65.524 -acodec copy 5_284176605_20171127113703805.aac
  44 +ffmpeg -y -i 5_284176605_20171127113703805.aac -i 284176605_20171127115159445.webm -acodec copy -vcodec libx264 5.ts
  45 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 961.164 -t 3.475 -acodec copy 6_284176605_20171127113703805.aac
  46 +ffmpeg -y -ss 0 -i 284176605_20171127115308444.webm -vframes 1 -f mjpeg -an 284176605_20171127115308444.webm.jpg
  47 +ffmpeg -y -loop 1 -i 284176605_20171127115308444.webm.jpg -i 6_284176605_20171127113703805.aac -loop 0 -shortest -acodec copy -vcodec libx26
  48 +4 6.ts
  49 +ffmpeg -y -i 284176605_20171127113703805.aac -ss 964.639 -t 1815.808 -acodec copy 7_284176605_20171127113703805.aac
  50 +ffmpeg -y -i 7_284176605_20171127113703805.aac -i 284176605_20171127115308444.webm -acodec copy -vcodec libx264 7.ts
  51 +copy /B 0.ts + /B 1.ts + /B 2.ts + /B 3.ts + /B 4.ts + /B 5.ts + /B 6.ts + /B 7.ts m.ts ;windows
  52 +cat 0.ts 1.ts 2.ts 3.ts 4.ts 5.ts 6.ts 7.ts> m.ts ;linux
  53 +ffmpeg -y -i m.ts -acodec copy -vcodec copy dest.ts
  54 +
  55 +调用ffmpeg时,视频编码参数是: -vcodec libx264 -level 3.1 -preset veryfast -g 40 -r 20
  56 +音频编码参数是: -acodec copy
  57 +如果要修改,windows下在merge_av.exe同目录下新建merge_av.cfg文本文件,第一行保存视频编码,第二行保存音频编码;linux 下,merge_av.cfg保存在HOME目录。
4 58
5 -应用程序向导已为您创建了此 merge_av 应用程序。  
6 59
7 -本文件概要介绍组成 merge_av 应用程序的每个文件的内容。  
8 60
9 -  
10 -merge_av.vcxproj  
11 - 这是使用应用程序向导生成的 VC++ 项目的主项目文件,其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。  
12 -  
13 -merge_av.vcxproj.filters  
14 - 这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp”文件与“源文件”筛选器关联。  
15 -  
16 -merge_av.cpp  
17 - 这是主应用程序源文件。  
18 -  
19 -/////////////////////////////////////////////////////////////////////////////  
20 -其他标准文件:  
21 -  
22 -StdAfx.h, StdAfx.cpp  
23 - 这些文件用于生成名为 merge_av.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。  
24 -  
25 -/////////////////////////////////////////////////////////////////////////////  
26 -其他注释:  
27 -  
28 -应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。  
29 -  
30 -/////////////////////////////////////////////////////////////////////////////