<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用Python+FFMPEG實現(xiàn)視頻分割與合并

          共 2917字,需瀏覽 6分鐘

           ·

          2021-04-01 13:11

          前言

          日常中偶爾會遇到需要簡單剪輯處理視頻的場景,以前我可能會拿出PR來剪輯一下,(別跟我說國產(chǎn)那些軟件,剪輯完視頻強制加上廣告片頭片尾惡心的一批),但是PR畢竟太重量級,剪個簡單的視頻都要花不少時間,直到我發(fā)現(xiàn)了FFmpeg……

          這個FFmpeg真的是神器,免費開源功能強大,好像很多軟件都是基于這個開發(fā)的,它本身提供了命令行接口就已經(jīng)能滿足我們?nèi)粘5暮唵我曨l處理需求,我用來簡單處理視頻分割、合并,真的很香。

          不過命令行用來處理一兩個還行,如果是要處理多個視頻,或者是服務(wù)端有視頻處理的需求(如轉(zhuǎn)碼、加水印這類),就需要有一種方便的方法在代碼里運用FFmpeg,于是本文打算介紹python和FFmpeg間的無縫接入調(diào)用~

          ffmpy

          首先FFmpeg是一個可執(zhí)行文件,要在Python中調(diào)用FFmpeg并且監(jiān)控它的狀態(tài),需要使用類似os.system()或者是subprocess模塊來創(chuàng)建子進(jìn)程,需要自己處理很多工作,比較麻煩……

          ffmpy庫就是幫我們解決這個問題的,完美整合FFmpeg,把子進(jìn)程管理封裝好了,我們直接輸入好參數(shù)調(diào)用就完事了

          代碼

          本文只是簡單介紹python中調(diào)用ffmpeg的方法,F(xiàn)Fmpeg的功能很強大,限于篇幅本文不能一一介紹FFmpeg的功能,想深入了解FFmpeg的同學(xué)可以查看最后的參考資料~

          視頻分割

          例子是最簡單的從一個視頻中分割出一個片段的用法,并且使用了-vcodec copy -acodec copy參數(shù),表示音頻和視頻都不轉(zhuǎn)碼提高處理視頻的速度。

          操作看下面的代碼就知道了,輸入輸出,安排得明明白白,輸入和輸出都是字典類型,文件名是key,參數(shù)是value。

          import ffmpy

          ff = ffmpy.FFmpeg(
              inputs={'input.mp4'None},
              outputs={'output.mp4': [
                  '-ss''00:01:20',
                  '-t''02:00:00',
                  '-vcodec''copy',
                  '-acodec''copy'
              ]}
          )

          ff.run()

          在執(zhí)行ff.run()之前,可以先用print(ff.cmd)把命令打印出來看看。

          上述的視頻分割操作,對應(yīng)的FFmpeg命令是:

          ffmpeg -i input.mp4 -ss 00:01:20 -t 02:00:00 -vcodec copy -acodec copy output.mp4

          視頻合并

          視頻合并就比較麻煩了,如果直接用FFmpeg命令輸入多個視頻文件,輸出一個的話,需要轉(zhuǎn)碼過程,這樣速度就很慢了,失去了合并的意義。

          我找了資料,只有使用文件列表的方式來合并視頻是可以直接合并不轉(zhuǎn)碼的,不過這要求先創(chuàng)建一個文件用來保存視頻列表,在Python中,我們可以通過創(chuàng)建臨時文件來實現(xiàn)。

          代碼如下:

          import os
          import tempfile
          import ffmpy

          # 創(chuàng)建臨時文件
          temp_dir = tempfile.mktemp()
          os.mkdir(temp_dir)
          concat_file = os.path.join(temp_dir, 'concat_list.txt')

          with open(concat_file, 'w', encoding='utf-8'as f:
              f.write('\n'.join([
                  'file C:/1.mp4',
                  'file C:/2.mp4',
                  'file C:/3.mp4',
              ]))

          ff = ffmpy.FFmpeg(
              global_options=['-f''concat'],
              inputs={concat_file: None},
              outputs={'output.mp4': ['-c''copy']}
          )

          ff.run()

          搞定!

          參考資料

          • ffmpy官方文檔:https://ffmpy-zh.readthedocs.io/zh/latest/ffmpy.html
          • 用 Python 代碼生成視頻的縮略圖:https://blog.csdn.net/fei347795790/article/details/102068777
          • FFMPEG 視頻分割和合并:https://www.jianshu.com/p/cf1e61eb6fc8
          • FFmpeg 視頻處理入門教程:https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html




          推薦閱讀




          使用Kotlin搭配Springboot開發(fā)RESTFul接口(二)自定義配置、跨域、分頁
          花一周時間整理的六千字長文!深入思考技術(shù)本質(zhì),跨平臺開發(fā)框架AspNetCore的簡單實踐雜談
          我的2020回顧——技術(shù)篇
          聊聊Django應(yīng)用的部署和性能的那些事兒
          數(shù)據(jù)分析必備技能!3分鐘教會你如何在PyQt中畫好看的圖表
          Flutter移動應(yīng)用快速構(gòu)建實踐——狀態(tài)管理、國際化、數(shù)據(jù)持久化、性能優(yōu)化
          無需折騰的Linux發(fā)行版:Manjaro體驗與配置筆記,開箱即用 真香!


          瀏覽 119
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  东京热一区二区 | 无码一区二区久久 | 韩日内射 | 国产精品嫩草久久久久yw193 | 操屄电影 |