躺著就能漲粉?Python自動化短視頻搬運(二)|合并影片

腳本一:Youtube影片獲取 (Continued...)

3) 合并音視頻

? ? 上文中,我們成功把Youtube上1080p的視頻和128kbps的音頻下載了下來,文件名分別是v1080p.webm和audio.mp4,接下來的任務(wù)就是用python把他們合成一個有畫面有聲音的高清影片。這里就需要使用一個跨平臺的高性能音視頻處理工具FFmpeg,它有非常強大的功能包括視頻采集功能、視頻格式轉(zhuǎn)換、視頻抓圖、給視頻加水印,加字幕等。FFmpeg包括其原創(chuàng)強大的libavcodec庫都是開源的,提供基于命令行的可執(zhí)行文件進行使用,同時也提供庫功能供程序內(nèi)部使用。更加詳細的信息可以訪問主頁:https://ffmpeg.org/ 。由于其功能之強大,除了合并視頻,后面還會有不少使用它的機會。首先我們先確保環(huán)境里安裝了FFmpeg:

安裝FFmpeg


$ ffmpeg -version
ffmpeg version N-107626-g1368b5a725-tessus Copyright (c) 2000-2022 the FFmpeg developers ...

? ? 如沒有打印出版本信息,那我們需要先進行安裝,各個操作系統(tǒng)的安裝包,可執(zhí)行文件和源碼都可以在官網(wǎng)下載到:
https://ffmpeg.org/download.html
Ubuntu,Debian的用戶可以直接使用apt-get下載安裝:

$ sudo apt-get install ffmpeg

? ? MacOS用戶可以在https://evermeet.cx/ffmpeg/中直接下載bin文件,解壓后得到ffmpeg和ffprobe兩個文件,保存到合適位置比如~/opt/ffmpeg/bin/。建議同時配置系統(tǒng)默認路徑,具體做法就是打開~/.bash_profile文件:

vim ~/.bash_profile

? ?在該文件的最后添加一句:

export PATH="/Users/你的用戶名/opt/ffmpeg/bin:$PATH"

? ? 其他操作系統(tǒng)的用戶請參考官網(wǎng)下載安裝,這里不詳述了。


合并影片

? ? 回到合并影片,剛剛說到FFmpeg提供系統(tǒng)執(zhí)行和程序調(diào)用兩種方式,但嘗試下來程序調(diào)用功能還是比較有限,所以我們使用系統(tǒng)執(zhí)行的方式,好在Python可以很方便地調(diào)用OS來執(zhí)行外部應(yīng)用軟件。為了測試功能,我們先直接在命令行中執(zhí)行一句ffmpeg指令合并v1080p.webm和audio.mp4兩個文件,并生成一個叫做"v1080p+audio.mp4"的文件:

$ ffmpeg -y -i v1080p.webm -i audio.mp4 -shortest v1080p+audio.mp4

? ?接下來會有很多的打印,來顯示視頻處理的過程,具體打印內(nèi)容我們可以忽略,只要耐心等待一段時間(取決于計算機處理性能),執(zhí)行完成后,就可以在同目錄下找到“v1080p+audio.mp4”文件,播放,你會發(fā)現(xiàn)音視頻合并完成!
? ?命令行執(zhí)行成功后,我們就可以把它集成到我們的Python代碼里,讓合并功能自動執(zhí)行,代碼也是非常簡單:

import os

os.system("ffmpeg -y -i v1080p.webm -i audio.mp4 -shortest v1080p+audio.mp4")

? ?由于我們并不能確定Youtube分辨率最高的影片究竟有沒有包含acode即音軌,因此在搬運實戰(zhàn)中可以在代碼中對該stream的字典里查詢acode是否存在,或?qū)λ姓业降淖罡叻直媛视捌宦啥己喜udio stream,由于即使stream里有acode,它和audio stream的聲音也是一樣的,所以合并并不會影響聲音播放。
? ?另外,真正實戰(zhàn)中對于ffmpeg指令中的文件名也可以用字符串拼裝來靈活處理輸入輸出文件,如:

fmpeg_command = "ffmpeg -y -i %s -i %s -shortest %s" % (video_input, audio_input, file_output)
os.system(ffmpeg_command)

? ?順便提一句,掌握了油管的下載,有興趣的話也是可以建一個小站,專門提供油管視頻的下載服務(wù),以后可能我會出一期搭建這種小站的文章,具體就如這種:


某個隨便搜索的下載站

? ?下一篇,我們將示范如何進行Youtube頻道相關(guān)的操作。

進入下一篇:《躺著就能漲粉?Python自動化短視頻搬運(三)|頻道監(jiān)測》

返回上一篇:《躺著就能漲粉?Python自動化短視頻搬運(一)|下載影片》

本篇和上篇合并用到的代碼

import os
from pytube import YouTube

def download_complete_handler(stream, file_path):
    print ("File: " + stream.title + "downloaded completed in " + file_path)


video = YouTube("https://www.youtube.com/watch?v=WZbKAFP1090",
    on_complete_callback=download_complete_handler)

print("Video_title = " + video.title)
print("Video_author = " + video.author)
print("Video_length = " + str(video.length))

current_res = 0
stream_highest_res = video.streams[0]
for everystream in video.streams.filter(type="video"):
    if int(everystream.resolution[:-1]) > 1080:
        continue
    if int(everystream.resolution[:-1]) > current_res:
        current_res = int(everystream.resolution[:-1])
        stream_highest_res = everystream
print("Highest stream: ", stream_highest_res)

stream_highest_res.download(filename='v1080p.webm')

stream_audio = video.streams.filter(type="audio", abr="128kbps")[0]
print(stream_audio)
stream_audio.download(filename='audio.mp4')

os.system("ffmpeg -y -i v1080p.webm -i audio.mp4 -shortest v1080p+audio.mp4")

merge_video.py

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容