使用python編寫shell腳本並運行


一、場景

使用爬蟲爬取一些分段的MP4的文件的時候,需要使用到FFmpeg將MP4合並成一個文件,這里記錄一下遇到的問題,方便以后的查詢。

二、問題與解決方法

首先是編寫shell文件,直接通過文件讀寫的方式就可以完成一系列指令的生成,這里舉一個視頻分割重組的shell腳本例子。

#! /bin/bash # 將 mp4 文件封裝為 ts 格式 ffmpeg -i 20210506113922.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ffmpeg -i 20210506114000.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts ffmpeg -i 20210506114035.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 3.ts ffmpeg -i 20210506114154.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 4.ts # 拼接 ts 並導出最終 mp4 文件 ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4 # 刪除過程中生成的 ts 文件 rm *.ts

2.1 文件格式

編寫完文件格式使用以下的命令執行shell的時候出現了Not Found的指令

# new_shell.sh文件就是上面的視頻切割文件。
os.systeim("sh new_shell.sh") # 報錯信息
""" not found *.ts ... """

看到上述問題,第一個反應就是shell的格式不正確,通過notepad++進行查看,可以得到他的換行符是CRLF,而shell執行的時候需要是LF,因此需要進行格式轉換。

# 將shell文件變成unix的文件格式 # 使用的sed指令
sed -i 's/\r//g' [filename] # 示例:
sed -i 's/\r//g' new_shell.sh

2.2 注意

python執行cmd指令的時候需要注意指令中的正則和工作區

# 工作區的轉化 # 使用os.getcwd()獲取當前的工作區
os.chdir('[目標區域]') # 指令的正則 # 由於使用到了\r等需要和正則區分,避免系統錯誤識別

三、總結

3.1 Windows下的shell腳本轉化

使用指令轉化,或者notepad++轉化

3.2 注意格式,工作區等

如正則、路徑問題

參考

轉換CRLF

視頻合並


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM