记将m3u8多个视频⽂件合并为整体法⼀(未加密)
理论上讲,从⽹站上下载的这种视频格式的⽂件都是⼀个“.m3u8”为后缀的⽬录⽂件加上⼀个⽂件夹。⽂件夹⾥⾯放置的就是实际的视频⽂件了。如果没有加密的话,你是可以直接把它⽤视频播放器打开的。如果不能打开的话,那说明⽂件已经被加密了,本篇⽇记则不适合。
理论上讲,⾥⾯的视频⽂件都是名称递增的,⽐如abcd1.ts、abcd2.ts。各个⽂件只有后⾯的数字不同⽽已。如果不是这样,那么,你得根据m3u8⽬录⽂件(打开⽅式为⽂本),从头⾄尾排序了。如果是这样的话,本篇⽇记是合适的,但是需要⾃⾏改动。
⾔归正传,⾃⼰百度搜索 ffmpeg下载 .或者根据百度视频怎么下载
下载完后,解压即可,然后去配置环境变量: path。后⾯新建即可,加⼊打开bin⽂件夹后复制的地址栏的地址即可。
检验配置好了没有,快捷键 windows+R,键⼊cmd后进⼊控制台,再键⼊ffmpeg,如果不是出现未安装的命令啥的,那应该就是没问题的。懒得插图。
这⾥假设你已经配置好了。这⾥先给出你最后在控制台键⼊的语句:ffmpeg -f concat -safe 0 -i C:\Users\17724\Desktop\ -c copy C:\Users\17724\Desktop\test\newoutput.mp4
这⾥注意的地⽅就是 ⽂件的位置和名称⼀定要设置好,还有产出视频的位置和名称也要根据下⾯⾃⼰改动。
代码看不懂可以留⾔也可以⾃⾏百度,建议百度。
还要注意笔者⽤的dev-cpp。要设置为⽀持c++11,怎么设置呢,因为不想插图,也就不再赘述了,留⾔或者⾃⾏百度都可。
1 //这⾥先给出你最后在控制台键⼊的语句:ffmpeg -f concat -safe 0 -i C:\Users\Administrator\ -c copy C:\Users\Administrator\Desktop\outputnow.mp4
2 #include<iostream>
3 #include<string.h>
4 using namespace std;
5 int main()
6 {
7    /* 根据视频⽂件的顺序改动循环即可 */
8    for(int i=0;i<1019;i++)
9    {
10        string s="file ";
11        /* 下⾯添加的是视频⽂件的⽂件位置和视频⽂件的共同前缀。具体的⾃⼰改动即可*/
12        s+="'C:\\Users\\Administrator\\Desktop\\test\\abcd" +to_string(i)+".ts'\n";
13        /* 如果原⽂件没有后缀的话,就去掉.ts即可。*/
14        cout<<s;
15    }
16 }
这⾥,要把运⾏后的输出内容全部复制到中,再在控制台中运⾏最后那句代码即可。合并速度很快,不会久等的。
此外,还有⼀种类似的⽅法但是效果完全不同,读者⾃⾏体会:ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4  也是⽤于多个视频的合并,如果读者理解了上⾯的做法,那么下⾯的这种⽅法要运⽤也是毫⽆问题的。作者也是今天才接触这个ffmpeg,还不能算做⼊门,所以读者对ffmpeg有啥好的理解,也是可以指导⼀下的。