動画から静止画を出力し拡大処理を行い再び動画を作成するアップコンバートするスクリプトを組みたいので、それに必要がありそうな機能を重点的に調べてみました。
パッケージのインストール
ffmepg.exeがインストールされていてパスが切られている環境が前提。
pip install ffmpeg-python
フレームレートを取得
#!/usr/bin/env python3
import ffmpeg
path = './sample.mp4'
info = ffmpeg.probe(path)
r_frame_rate = info['streams'][0]['r_frame_rate']
print(r_frame_rate)
ビデオコーデックを取得
#!/usr/bin/env python3
import ffmpeg
# ビデオコーデックを取得
path = './sample.mp4'
info = ffmpeg.probe(path)
codec_name = ""
for stream in info['streams']:
if (stream['codec_type'] == 'video'):
codec_name = stream['codec_name']
print(codec_name)
連番画像を出力
#!/usr/bin/env python3
import ffmpeg
import os
import shutil
# 連番画像を出力
in_file = './sample.mp4'
out_dir = './temp'
if os.path.isdir(out_dir):
shutil.rmtree(out_dir)
os.mkdir(out_dir)
(
ffmpeg
.input(in_file)
.output("{0}/img%05d.png".format(out_dir))
.run()
)
連番画像から動画を作成
#!/usr/bin/env python3
import ffmpeg
import os
# 連番画像から動画を作成
in_file = './sample.mp4'
temp_dir = './temp'
dir, file = os.path.split(in_file)
vidoe_file = "{0}/{1}".format(temp_dir, file)
print(vidoe_file)
if os.path.isfile(vidoe_file):
os.remove(vidoe_file)
video_codec = "h264"
frame_rate = "24000/1001"
(
ffmpeg
.input("{0}/img%05d.png".format(temp_dir), framerate=frame_rate)
.output(vidoe_file, vcodec=video_codec, r=frame_rate, vb="5000k")
.run()
)
動画から音声を出力
#!/usr/bin/env python3
import ffmpeg
import os
# 動画から音声を出力
in_file = './sample.mp4'
_, filename = os.path.split(in_file)
basename, ext = os.path.splitext(filename)
temp_dir = './temp'
audio_file = "{0}/{1}.aac".format(temp_dir, basename)
if os.path.isfile(audio_file):
os.remove(audio_file)
print(audio_file)
(
ffmpeg
.input(in_file)
.output(audio_file, acodec="copy")
.run()
)
動画と音声を結合
#!/usr/bin/env python3
import ffmpeg
import os
# 動画と音声を結合
video_file = "./temp/sample.mp4"
audio_file = "./temp/sample.aac"
out_file = "./sample.mp4"
if (os.path.isfile(out_file)):
os.remove(out_file)
(
ffmpeg
.output(ffmpeg.input(video_file), ffmpeg.input(audio_file), out_file, vcodec="copy", acodec="copy")
.run()
)
コメント