国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python調用ffmpeg命令行工具便捷操作視頻示例實現過程

python調用ffmpeg命令行工具便捷操作視頻示例實現過程

2022-02-22 00:08Python 技術 Python

現在短視頻很流行,有很多視頻編輯軟件,功能豐富,而我們需要的只是裁剪功能,而且需要用編程的方式調用,那么最合適的莫過于ffmpeg了

文 | 李曉飛

來源:Python 技術「ID: pythonall」

最近有了一個新任務,需要將賽事視頻,拆分成兩分鐘以內的小段,用于發布到短視頻平臺上。

本以為是個一次性的工作,結果賽事視頻數據巨大,視頻文件長短不一,完全沒法手工處理,于是 Python 又一次拯救了我。

還等什么,開始干吧!

最重要的事

無論做什么事情,都要去分析一下最重要的是什么,然后集中精力攻克,再繼續找最重要的事。

對我們這個任務來說,不算是個大項目,不過呢,還是要找最重要的事開始,步步為營,最終將整個問題解決了。

整體來來看,我們需要從一個目錄中讀取視頻文件,然后,對每個視頻文件進行裁剪,最后將處理好的文件保存好。

在這個過程中,最重要的是什么呢?我覺得,是視頻裁剪,如果不能方便的裁剪視頻,其他的一切工作都是白費的,是吧。

裁剪視頻

現在短視頻很流行,有很多視頻編輯軟件,功能豐富,而我們需要的只是裁剪功能,而且需要用編程的方式調用,那么最合適的莫過于 ffmpeg[1] 了。

ffmpeg 是一個命令行工具,功能強大,可以編程調用。

從 ffmpeg 官網上下載對應操作系統的版本,我下的是 Windows 版[2]。

下載后解壓到一個目錄,然后將目錄下的 bin,配置到環境變量里。然后打開一個命令行,輸入:

?
1
2
> ffmpeg -version
ffmpeg version 2021-10-07-git-b6aeee2d8b-full_build- ...

測試一下,能顯示出版本信息,說明配置好了。

現在讀一下文檔,發現拆分視頻文件的命令是:

?
1
ffmpeg -i [filename] -ss [starttime] -t [length] -c copy [newfilename]

]

i 為需要裁剪的文件

ss 為裁剪開始時間

t 為裁剪結束時間或者長度

c 為裁剪好的文件存放

好了,用 Python 寫一個調用:

?
1
2
3
4
5
6
7
import subprocess as sp
 
def cut_video(filename, outfile, start, length=90):
    cmd = "ffmpeg -i %s -ss %d -t %d -c copy %s" % (filename, start, length, outfile)
    p = sp.Popen(cmd, shell=True)
    p.wait()
    return
  • 定義了一個函數,通過參數傳入 ffmpeg 需要的信息
  • 將裁剪命令寫成一個字符串模板,將參數替換到其中
  • subprocessPopen 執行命令,其中參數 shell=True 表示將命令作為一個整體執行
  • p.wait() 很重要,因為裁剪需要一會兒,而且是另起進程執行的,所以需要等執行完成再做后續工作,否則可能找不到裁剪好的文件

這樣視頻裁剪工作就完成了,然后再看看什么是最重要的。

計算分段

視頻裁剪時,需要一些參數,特別是開始時間,如何確定呢?如果這件事做不好,裁剪工作就很麻煩。

所以看看如何計算裁剪分段。

我需要將視頻裁剪成一分半的小段,那么將需要知道目標視頻文件的時間長度。

獲取視頻長度

如何獲得長度呢?ffmpeg 提供了另一個命令 —— ffprobe

找了一下,可以合成一個命令來獲取:

?
1
2
3
> ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i a.flv
 
920.667

命令比較復雜哈,可以先不用管其他參數,只要將要分析的視頻文件傳入就好了。命令的結果是顯示一行視頻文件的長度。

于是可以編寫一個函數:

?
1
2
3
4
5
6
7
8
9
import subprocess as sp
 
def get_video_duration(filename):
    cmd = "ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i %s" % filename
    p = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE)
    p.wait()
    strout, strerr = p.communicate() # 去掉最后的回車
    ret = strout.decode("utf-8").split("\n")[0]
    return ret
  • 函數只有一個參數,就是視頻文件路徑
  • 合成命令語句,將視頻文件路徑替換進去
  • subprocess 來執行,注意這里需要設置一下命令執行后的輸出
  • wait 等待命令執行完成
  • 通過 communicate 提取輸出結果
  • 從結果中提取視頻文件的長度,返回

分段

得到了視頻長度,確定好每個分段的長度,就可以計算出需要多少分段了。

代碼很簡單:

?
1
2
3
import math
duration = math.floor(float(get_video_duration(filename)))
part = math.ceil(duration / length)

注意,計算分段時,需要進行向上取整,即用 ceil,以包含最后的一點尾巴。

得到了需要的分段數,用一個循環就可以計算出每一段的起始時間了。

獲取文件

因為處理的文件很多,所以需要自動獲取需要處理的文件。

方法很簡單,也很常用,一般可以用 os.walk 遞歸獲取文件,還可以自己寫,具體根據實際情況。

?
1
2
3
4
5
for fname in os.listdir(dir):
    fname = os.path.join(dir, os.path.join(dir, fname))
    basenames = os.path.basename(fname).split('.')
    mainname = basenames[0].split("_")[0]
    ...

提供視頻文件所在的目錄,通過 os.listdir 獲取目錄中的文件,然后,合成文件的絕對路徑,因為調用裁剪命令時需要絕對路徑比較方便。

獲取文件名,是為了在后續對裁剪好的文件進行命名。

代碼集成

現在每個部分都寫好了,可以將代碼集成起來了:

?
1
2
3
4
5
6
7
8
9
def main(dir):
    outdir = os.path.join(dir, "output")
    if not os.path.exists(outdir):
        os.mkdir(outdir)
 
    for fname in os.listdir(dir):
        fname = os.path.join(dir, os.path.join(dir, fname))
        if os.path.isfile(fname):
            split_video(fname, outdir)
  • main 方法是集成后的方法
  • 先創建一個裁剪好的存儲目錄,放在視頻文件目錄中的 output 目錄里
  • 通過 listdir 獲取到文件后,對每個文件進行處理,其中判斷了一下是否為文件
  • 調用 split_video 方法開始對一個視頻文件進行裁剪

總結

總體而言,這是個很簡單的應用,核心功能就是調用了一個 ffmpeg 命令。

相對于技術,更重要的是如何對一個項目進行分析和分解,以及從什么地方開始。

這里的方式起始時,不斷地找最重要地事情,以最重要的事情為線索不斷地推進,最終以自下而上地方式解決整個問題。

期望這篇文章對你有所啟發,比心。

參考資料

[1]

ffmpeg: http://ffmpeg.org/

以上就是python調用ffmpeg命令行工具便捷操作視頻示例實現過程的詳細內容,更多關于python調用命令行工具操作視頻的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/weixin_48923393/article/details/120858140

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 免费观看一级毛片 | 午夜久久久 | 91综合网 | 女人爽到高潮aaaa电影 | 亚洲男人的天堂网站 | 黄色片在线播放 | 亚洲一区二区中文字幕 | 免费www| www.亚洲 | 亚洲视频 欧美视频 | 国产黄色大片免费在线观看 | 99中文字幕| 99精品热视频 | 成人欧美| 97爱爱爱 | 日韩精品一区二区在线观看 | 久久免费99精品久久久久久 | 凹凸日日摸日日碰夜夜爽孕妇 | 日韩不卡一区 | 亚洲一区久久 | 欧美激情一区二区三区在线视频 | 伊人一区| 欧美日韩精品在线 | 在线永久免费观看黄网站 | 久久国产一区二区 | 中文字幕日韩欧美一区二区三区 | 亚洲一区二区三区四区的 | 久久国产精品免费一区二区三区 | 久久精品亚洲一区二区 | 亚洲一区免费在线观看 | 欧美在线观看一区 | 国产精品2| 国产精品久久久久久久午夜片 | 狠狠操综合网 | 国产精品久久久久久久9999 | 亚洲一区二区中文字幕 | 中文字幕亚洲精品 | 国产精品成av人在线视午夜片 | 亚洲精品久久久久久动漫 | 中文字幕在线免费 | 欧美激情一区二区三区在线视频 |