国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

神器 ffmpeg :操作視頻,極度舒適

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

[[438178]]

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

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

還等什么,開始干吧!

最重要的事

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

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

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

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

裁剪視頻

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

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

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

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

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

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

計算分段

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

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

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

獲取視頻長度

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

找了一下,可以合成一個命令來獲?。?nbsp;

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

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

于是可以編寫一個函數: 

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

分段

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

代碼很簡單: 

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

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

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

獲取文件

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

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

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

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

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

代碼集成

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

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

總結

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

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

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

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

 

責任編輯:龐桂玉 來源: Python編程
相關推薦

2022-11-30 07:23:39

2024-02-27 13:03:38

前端視頻合成FFmpeg

2017-04-05 16:30:09

Node.jsFFmpeg Canvas

2022-06-23 09:17:07

PythonGUIPyAutoGUI

2012-11-07 10:27:20

2022-08-29 10:39:32

FFmpeg多媒體框架開源

2023-09-26 17:14:15

2021-03-15 06:49:03

Ffmpeg項目轉換庫

2020-06-09 08:05:11

Android 代碼操作系統

2020-05-14 13:35:59

開源視頻 技術

2025-05-21 08:23:52

IO開發Java

2013-07-25 14:00:18

AndroidGenymotion模擬器

2018-08-15 15:23:48

視頻

2009-11-11 08:54:27

Windows 7系統漏洞補丁下載

2023-11-28 10:17:37

2020-12-28 13:55:11

云邊緣5G視頻云

2025-02-04 10:23:56

C#視頻版權

2022-08-12 08:38:52

FFmpegLinux命令

2022-03-15 16:53:12

FFmpeg視頻解碼Android

2024-12-12 08:50:30

開源多媒體框架
點贊
收藏

51CTO技術棧公眾號

成人av观看| 黄在线观看免费网站ktv| 99re热这里只有精品视频| 国模吧无码一区二区三区| 国内成人精品2018免费看| 欧美日韩精品不卡| 国产九九在线| 欧美综合一区二区三区| av中文在线| 亚洲精品视频在线播放 | 日韩码欧中文字| 宅男午夜电影| 亚洲成人三级| 精品久久国产老人久久综合| 日韩成人亚洲| 欧美在线视频a| 日韩视频一区| 屁屁影院ccyy国产第一页| 天天做夜夜做人人爱精品| 国产女同一区二区| 先锋影音久久久| 精品国产免费av| 一本到三区不卡视频| 高清电影一区| 3d动漫啪啪精品一区二区免费 | 91精品国产免费| 国产不卡精品| 国产精品国产三级国产专区53 | 日韩一区二区福利| 97色伦图片97综合影院| 一个色的综合| 亚洲成av人片在www色猫咪| 国产极品在线观看| 国产不卡一区二区在线播放| 蜜桃一区二区三区在线观看| 日本视频二区| 在线观看国产精品91| 91精品国产乱码久久久久久| www.男人天堂网| 欧美性猛交xxxx乱大交退制版| 亚洲男人在线| 欧美二区三区| 亚洲一区二区av在线| 香蕉久久免费电影| 99re在线视频观看| 中文字幕va一区二区三区| 日韩av激情| 成人免费视频网址| 国产日韩欧美电影| 小泽玛利亚av在线| 亚洲国产欧美另类丝袜| 九色porny自拍视频在线观看| 国产精品影片在线观看| 97久久人人超碰| 污污视频在线看| 91在线国产电影| 国产精品不卡视频| 国内自拍亚洲| 亚洲欧美日韩国产yyy| 精品久久久久久亚洲国产300| 伊人久久大香伊蕉在人线观看热v| 久久久久无码国产精品一区| 一区二区在线电影| 欧美一区在线观看视频| 久色乳综合思思在线视频| 一本色道久久综合| 爆操妹子视频在线观看| 最新的欧美黄色| 日韩电影在线免费| 黄色在线视频观看网站| 奇米四色中文综合久久| 成人精品视频一区二区三区尤物| av网站网址在线观看| 91久久偷偷做嫩草影院| 国产精品美女久久久久aⅴ国产馆| 欧美xxxxxx| 少妇精品久久久久久久久久| 欧美唯美清纯偷拍| 综合国产精品| 在线看片你懂得| 国产精品美女网站| 国产精品久久久久久久第一福利| 国产精品视频首页| 六月丁香激情网| 亚洲一区999| 高清不卡一区二区在线| 中文av在线全新| 黄色网zhan| 亚洲欧洲黄色网| 国产乱码精品一区二区三区亚洲人| 天天综合色天天综合色hd| 欧美乱妇一区二区三区不卡视频| 亚洲国产精品成人| 天天在线女人的天堂视频| 国产精品视频最多的网站| 夜夜操天天操亚洲| 成人羞羞动漫| 国产精品免费在线| 狠狠躁夜夜躁人人爽超碰91| 青青草91久久久久久久久| 白天操夜夜操| 国产精品久久久久久久久久东京 | 欧美午夜一区二区三区 | 午夜视频久久久| 欧美一二三四区在线| 欧美亚洲在线| 波多野结依一区| 久久精品国产精品亚洲精品色| 亚洲国产97在线精品一区| 喷白浆一区二区| 综合久久2023| 黑人糟蹋人妻hd中文字幕| 久久久久久久久综合| 一区二区三区四区不卡在线| 日韩在线视屏| 2017亚洲天堂1024| 一区二区三区欧美在线| 一区二区三区无码高清视频| 国产午夜亚洲精品不卡| 精品成人影院| 精品视频一二区| 日产精品一线二线三线芒果| 亚洲欧洲xxxx| 国产精品乱子久久久久| 日韩激情一区| 91社区在线高清| 一级特黄妇女高潮| 久久久欧美精品| 精品日本高清在线播放 | www.日本在线视频| 欧美激情一二区| 性做久久久久久免费观看| 国产精品久久777777毛茸茸| 另类中文字幕国产精品| 四色永久网址| 国外成人免费视频| 夜夜嗨av色一区二区不卡| 亚洲视频综合在线| 亚洲久久一区二区| 欧美色片在线观看| 九七伦理97伦理| 欧美大陆一区二区| 久久成人免费视频| 黄色成人在线播放| 狠狠色丁香久久婷婷综合_中| 韩国精品福利一区二区三区| 97电影在线看视频| 成人av在线播放观看| 国产成人久久久| 亚洲第一精品夜夜躁人人躁| 国产精品美女久久久久久久久| 午夜精品久久| 久久av影院| 日本黄在线观看| 久久久性生活视频| 成人免费xxxxx在线观看| 亚洲色图五月天| 精品久久久久久久久久国产| 国产精品18久久久久久久久| 日韩欧美在线中字| 三级成人黄色影院| 在线视频中文字幕久| 欧美国产视频日韩| 欧美写真视频网站| 久久精品亚洲国产奇米99 | 精品免费一区二区三区蜜桃| 色老头一区二区三区在线观看| 欧美日韩中文在线| 97se亚洲国产综合自在线| 国产一区观看| 91欧美极品| 2021中文字幕在线| 欧美日韩国产三区| 午夜精品视频网站| 精品福利一二区| 五月婷婷久久丁香| 99免费精品在线观看| 久久国产88| 欧美美女一区| 国产精品久久久久久久久久辛辛 | 欧美欧美一区二区| 日本成熟性欧美| 亚洲精品视频久久| 日韩欧美在线观看视频| 99国产精品久久久久久久久久| 国产精品久久久久9999高清| 国产91一区| 亚洲国产精品免费视频| 2022成人影院| 黄色动漫在线观看| 一级片免费在线观看| 日本激情综合网| 男人日女人下面视频| 亚洲图片都市激情| 精品日韩电影| 91成人免费观看| 国产欧美亚洲视频| 欧美视频免费在线观看| 亚洲国产激情av| 高清av一区二区|