python ts视频转mp4
首先說明一下Ts格式
TS(TransportStream,傳輸流)是一種封裝的格式,它的全稱為MPEG2-TS。MPEG2-TS是一種標(biāo)準(zhǔn)數(shù)據(jù)容器格式,傳輸與存儲音視頻、節(jié)目與系統(tǒng)信息協(xié)議數(shù)據(jù),主要應(yīng)用于數(shù)字廣播系統(tǒng),譬如DVB、ATSC與IPTV。傳輸流最初是為廣播而設(shè)計(jì)的。后來,通過在標(biāo)準(zhǔn)的188字節(jié)數(shù)據(jù)包中添加4字節(jié)的時(shí)間碼(TC),從而使該數(shù)據(jù)包成為192字節(jié)的數(shù)據(jù)包,使其適用于數(shù)碼攝像機(jī),錄像機(jī)和播放器。
處理場景
爬取某魚以及某些網(wǎng)站的視頻,會獲取到很多的以ts格式結(jié)尾的視頻文件,這個(gè)時(shí)候需要進(jìn)行合成成一個(gè)Ts視頻文件或者M(jìn)P4格式視頻,我自己的電腦播放不了Ts后綴格式視頻,于是就將Ts后綴格式視頻轉(zhuǎn)為了MP4。
直接使用os內(nèi)置模塊以下是代碼:
import osdef merge_ts_video(ts_path, ts_path_):all_ts = os.listdir(ts_path)# 最好是對all_ts 進(jìn)行排序處理一下# 我這里獲取到后直接對ts視頻文件進(jìn)行了排序處理,所以沒有加排序操作for file in all_ts:with open(ts_path + file, 'rb') as f1: # 讀取視頻以二進(jìn)制進(jìn)行處理with open(ts_path_ + "VideoName.mp4", 'ab') as f2: # 存儲到指定位置,VideoName為變量值f2.write(f1.read())os.remove(os.path.join(ts_path, file)) # 將每次處理后的ts視頻文件進(jìn)行刪除merge_ts_video(r"./VideoPreliminaryStorage/", r"./VideoFinalStorage/") # 函數(shù)調(diào)用:merge_ts_video # 參數(shù)值: # 參數(shù)1 存放 ts 的路徑 VideoPreliminaryStorage # 參數(shù)2 存放 mp4 的路徑 VideoFinalStorage以上內(nèi)容雖然可以將Ts格式視頻轉(zhuǎn)為MP4格式,但是一些播放器無法識別出來,如:某音
轉(zhuǎn)完之后是MP4,但是視頻的格式變?yōu)榱?#xff1a;媒體文件(.mp4) (.mp4)
所以還是使用ffmpeg了
先將所以的Ts格式視頻合并成一個(gè)Ts格式文件,合并完成后進(jìn)行轉(zhuǎn)mp4
def merge_ts_video(ts_path, ts_path_, ffmpeg_path, video_name):all_ts = os.listdir(ts_path)all_ts_mp4 = [ts_path + file for file in all_ts]for all_ in all_ts_mp4:with open(all_, 'rb') as f1:with open(ts_path + f"{video_name}.ts", 'ab') as f2:f2.write(f1.read())# 刪除多余ts文件os.remove(os.path.join(all_))# Ts視頻轉(zhuǎn)MP4new_ts = os.listdir(ts_path)cmd = ffmpeg_path + " -i " + f"{ts_path + new_ts[0]}" + " -acodec copy -vcodec copy -absf aac_adtstoasc " + ts_path_ + "\\" + f"{video_name}.mp4"os.popen(cmd)# 刪除多余ts文件,清空文件夾(VideoPreliminaryStorage)os.remove(video_name + '.ts')for i in range(0, len(all_ts_mp4)):ts_name = os.path.basename(all_ts_mp4[i]) # 去掉文件名前面的文件路徑mp4_name = os.path.splitext(ts_name)[0] # 去掉文件名的后綴"""mp4 --> ts : ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.tsts --> mp4 : ffmpeg -i 2.ts -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4"""# # 拼接好運(yùn)行ffmpeg的命令行語句cmd = ffmpeg_path + " -i " + all_ts_mp4[i] + " -acodec copy -vcodec copy -absf aac_adtstoasc " + ts_path_ + "\\" + mp4_name + ".mp4"os.popen(cmd) # 函數(shù)調(diào)用:merge_ts_video # 參數(shù)值: # 參數(shù)1 存放 ts 的路徑 ts_path # 參數(shù)2 存放 mp4 的路徑 ts_path_ # 參數(shù)3 ffpmpeg 的路徑 ffmpeg_path # 參數(shù)4 視頻存儲 的名稱 video_name總結(jié)
以上是生活随笔為你收集整理的python ts视频转mp4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux进程流量检测,linux使用s
- 下一篇: websocket python爬虫_p