Ⅰ 使用cmd命令合并视频顺序有误,怎么解决
关于《用CMD命令合并TS视频的问题》这个问题中,您在我的回答里面的评论,说“找不到文件”。
看了您现在的附图,如果您使用了我那个答案中的代码,却未做修改的话,当然会找不到文件,因为那个问题中ts文件的命名格式是“(编号).ts”的,而您的文件命名方式是“编号.mp4”的,后缀名我们忽略不说,光编号,一个多了一对括号,而您的没有括号。如果代码复制过去后,只改了后缀名而已,执行后不报错才怪哦!
以下才是针对您命名方式的代码:
@echooff
for%%ain(*.mp4)doset/anum+=1
for/l%%ain(1,1,%num%)docallsetstr=%%str%%"%%~a.mp4"+
/b%str:~,-1%All.mp4
pause
所以说代码不是拿过去就直接用的,毕竟其他网友的情况可能和您的实际情况有所偏差,因此一定要根据自己的情况,进行修改。
Ⅱ cmd的命令合并ts视频文件如何更改合并的顺序
俗话说,兴趣所在,方能大展拳脚。so结合兴趣的学习才能事半功倍,更加努力专心,apparently本次任务是在视频网站爬取一些好看的小电影,地址不放(狗头保命)只记录过程。
实现功能:
从网站上爬取采用m3u8分段方式的视频文件,对加密的 "ts"文件解密,实现两种方式合并 "ts"文件,为防止IP被封,使用代理,最后删除临时文件。
环境 &依赖
Win10 64bit
IDE:Pycharm
Python 3.8
Python-site-package:requests + BeautifulSoup + lxml + m3u8 + AES
在PyCharm中创建一个项目会创建一个临时目录存放环境和所需要的package包,所以要在PyCharm 中项目解释器(Project Interpreter)中添加所有需要的包,这张截图是本项目的包列表,红框中是所必须的包,其他有的包我也不知道做什么用的。
下面开始我们的正餐,爬取数据第一步我们需要解析目标网站,找到我们需要爬取视频的地址,F12打开开发者工具
很不幸,这个网站视频是经过包装采用m3u8视频分段方式加载
科普一下:m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。
当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。
OK,本着“没有解决不了的困难“的原则我们继续,依旧在开发者模式,从Elements模式切换到NetWork模式,去掉不需要的数据,我们发现了两个m3u8文件一个key文件和一个ts文件
分别点击之后我们可以 看到对应的地址
OK,现在地址已经拿到了,我们可以开始我们的数据下载之路了。
首先进行初始化,包括路径设置,请求头的伪装等,之后我们通过循环去下载所有ts文件,至于如何定义循环的次数我们可以通过将m3u8文件下载之后解析文件得到所有ts的列表,之后拼接地址然后循环就可以得到所有ts文件了。
观察数据,不是真正路径,第二层路径在第三行可以看到,结合我们对网站源码分析再次拼接字符串请求:
之后我们循环得到的TS列表,通过拼接地址下载视频片段。但是问题远远没有这么简单,我们下载的ts文件居然无法播放,通过对第二层下载得到的m3u8文件进行分析我们可以发现这一行代码:
#EXT-X-KEY:METHOD=AES-128,URI="key.key"
此网站采用AES方法对所有ts文件进行了加密,其中
METHOD=ASE-128 :说明此视频采用ASE-128方式进行加密,
URI=“key.key”:代表key的地址
综上所诉,感觉好难啊,好绕了,都拿到了视频还看不了,但是我们要坚持我们的初心不能放弃。Fortunately,我们应该庆幸Python强大的模块功能,这个问题我们可以通过下载AES模块解决。
完成之后我们需要将所有ts合并为一个MP4文件,最简单的在CMD命令下我们进入到视频所在路径然后执行:
/b *.ts fileName.mp4
需要注意所有TS文件需要按顺序排好。在本项目中我们使用os模块直接进行合并和删除临时ts文件操作。
完整代码:之后我们循环得到的TS列表,通过拼接地址下载视频片段。但是问题远远没有这么简单,我们下载的ts文件居然无法播放,通过对第二层下载得到的m3u8文件进行分析我们可以发现这一行代码: #EXT-X-KEY:METHOD=AES-128,URI="key.key"
此网站采用AES方法对所有ts文件进行了加密,其中
METHOD=ASE-128 :说明此视频采用ASE-128方式进行加密,
URI=“key.key”:代表key的地址
综上所诉,感觉好难啊,好绕了,都拿到了视频还看不了,但是我们要坚持我们的初心不能放弃。Fortunately,我们应该庆幸Python强大的模块功能,这个问题我们可以通过下载AES模块解决。
完成之后我们需要将所有ts合并为一个MP4文件,最简单的在CMD命令下我们进入到视频所在路径然后执行:
/b *.ts fileName.mp4
需要注意所有TS文件需要按顺序排好。在本项目中我们使用os模块直接进行合并和删除临时ts文件操作。
Ⅲ 用命令行合并ts文件出现顺序混乱的现象,求一份新的代码
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行
<# :
cls
@echo off
rem 使用批量合并ts文件出现乱序/顺序错乱的解决方法
mode con lines=5000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
/b *.ts "合并.ts"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$codes=@'
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
public static class ExpDir
{
[DllImport("Shlwapi.dll", CharSet=CharSet.Unicode)]
public static extern int StrCmpLogicalW(string p1, string p2);
public static string[] Sort(string[] f)
{
Array.Sort(f, StrCmpLogicalW);
return f;
}
}
'@;
Add-Type -TypeDefinition $codes;
$path=$args[0].trimend('\');
$files=@(dir -liter $path|?{('.ts' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])}|%{$_.Name});
$list=[ExpDir]::Sort($files);
for($i=0;$i -lt $list.count;$i++){
$oldfile=get-item -liter ($path+'\'+$list[$i]);
$newname='_#'+$i.toString().PadLeft(8,'0')+$oldfile.Extension;
$newfile=$path+'\'+$newname;
write-host ($oldfile.Name+' --> '+$newname);
move-item -liter $oldfile.FullName $newfile;
}
Ⅳ cmd合并ts文件怎么解决排列不对问题
可以自行将文件按顺序,命名为:001.ts、002.ts...等。
然后再用 /b 001.ts+002.ts+...399.ts 合并.ts 来合并即可。