スキップしてメイン コンテンツに移動

RSSからYoutube/Podcast配信

動画作成

ffmpegを使った音声&映像ミキシング

ffmpegを使って音声ファイル(mp3)と映像ファイル(mp4)をミキシングします。

ライブラリの追加

$ sudo apt install ffmpeg
Pythonプログラム
test.pyに以下のコードを記述します。
subprocessを使ってffmpegをpythonから起動させます。
元となる映像データ(input.mp4)は著作権フリーのものから拾ってきてください。
※映像の長さと音声の長さのより短い方に合わせた動画が作成されます。
またHWエンコードの対応があれば、SWエンコーダー(libx264)ではなくHWエンコーダ―(h264_nvenc)を指定してください。

test.py
import subprocess
from subprocess import PIPE

def makeVideo():
    cmd = 'ffmpeg -y -i /tmp/input.mp4 -i /tmp/temp.mp3 '
    cmd += ' -movflags +faststart -c:a aac -profile:a aac_low -ac 2 -ar 48000 -c:v libx264'
    cmd += ' -vf yadif=0:-1:1 -profile:v high -bf 2 -g 30 -coder 1 -b:v 1M -b:a 384k'
    cmd += ' -pix_fmt yuv420p -map 0:v:0 -map 1:a:0 -shortest '
    cmd += ' /tmp/output.mp4 ' 
    rtn = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
    return   

以前のgetRss()から上記のmakeVideo()を呼び出します。
逐一動画にしても良いですが、PodcastやYoutubeにアップロードできる回数が限りがありますので、ある程度まとめた音声にしてから作成します。

test.py
def getRss():
    rssUrl = 'https://news.google.com/news/rss/headlines/section/topic/TECHNOLOGY'
    rssLang = '?hl=en-US&gl=US&ceid=US:en'
    feed = feedparser.parse(rssUrl + rssLang)
    for entry in feed.entries:
            link = entry.get('link')
            getBody(link)
    makeVideo()

これで動画を作成できました。次はこの動画をYoutubeにアップロードします。

参考URL:

FFmpeg