Ⅰ 使用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 來合並即可。