[Python] avi形式をmp4形式に変換する方法(h.264/h.265/AV1)
PythonでAVI形式の動画をMP4形式に変換するには、ffmpeg
やmoviepy
ライブラリを使用するのが一般的です。
ffmpeg-python
はPythonからffmpeg
を簡単に操作できるラッパーです。
まず、ffmpeg
をインストールし、次にffmpeg-python
をインストールします。
変換時にコーデックを指定することで、H.264、H.265、AV1などのエンコードが可能です。
このページでは、Pythonからffmpegを扱いやすくしたmoviepyを使用した方法を紹介します。
AVIからMP4への変換方法
H.264コーデックを使用した変換
H.264は、広く使用されている動画コーデックで、良好な画質と圧縮率を提供します。
以下のサンプルコードでは、moviepy
ライブラリを使用してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_h264.mp4"
# 動画を読み込み、H.264コーデックで保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264")
[MoviePy] Writing video output_video_h264.mp4
[MoviePy] Done.
H.265コーデックを使用した変換
H.265(HEVC)は、H.264よりも高い圧縮率を持ち、同じ画質でファイルサイズを小さくできます。
以下のコードは、H.265コーデックを使用してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_h265.mp4"
# 動画を読み込み、H.265コーデックで保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx265")
[MoviePy] Writing video output_video_h265.mp4
[MoviePy] Done.
AV1コーデックを使用した変換
AV1は、最新の動画コーデックで、さらに高い圧縮率を実現します。
以下のサンプルコードでは、AV1コーデックを使用してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_av1.mp4"
# 動画を読み込み、AV1コーデックで保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libaom-av1")
[MoviePy] Writing video output_video_av1.mp4
[MoviePy] Done.
音声コーデックの指定方法
動画の音声コーデックを指定することも可能です。
以下のサンプルコードでは、音声コーデックをAACに設定しています。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_with_audio.mp4"
# 動画を読み込み、音声コーデックをAACで保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264", audio_codec="aac")
[MoviePy] Writing video output_video_with_audio.mp4
[MoviePy] Done.
出力ファイルの品質設定
出力ファイルの品質を設定するためには、ビットレートや解像度を指定することができます。
以下のサンプルコードでは、ビットレートを指定してMP4ファイルを生成します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_quality.mp4"
# 動画を読み込み、ビットレートを指定して保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264", bitrate="2000k")
[MoviePy] Writing video output_video_quality.mp4
[MoviePy] Done.
このように、Pythonを使用してAVIファイルをMP4形式に変換する際には、コーデックや音声コーデック、品質設定を柔軟に指定することができます。
変換時のオプション設定
解像度の変更方法
動画の解像度を変更することで、ファイルサイズや画質を調整できます。
以下のサンプルコードでは、解像度を640×360に変更してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_resolution.mp4"
# 動画を読み込み、解像度を変更して保存
with VideoFileClip(avi_file) as video:
video_resized = video.resize(newsize=(640, 360)) # 解像度を640x360に変更
video_resized.write_videofile(mp4_file, codec="libx264")
[MoviePy] Writing video output_video_resolution.mp4
[MoviePy] Done.
フレームレートの変更方法
フレームレートを変更することで、動画の滑らかさを調整できます。
以下のサンプルコードでは、フレームレートを30fpsに設定してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_fps.mp4"
# 動画を読み込み、フレームレートを変更して保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264", fps=30) # フレームレートを30fpsに設定
[MoviePy] Writing video output_video_fps.mp4
[MoviePy] Done.
ビットレートの調整方法
ビットレートを調整することで、動画の画質とファイルサイズをコントロールできます。
以下のサンプルコードでは、ビットレートを1500kbpsに設定してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_bitrate.mp4"
# 動画を読み込み、ビットレートを調整して保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264", bitrate="1500k") # ビットレートを1500kbpsに設定
[MoviePy] Writing video output_video_bitrate.mp4
[MoviePy] Done.
複数ファイルの一括変換
複数のAVIファイルを一括でMP4形式に変換することも可能です。
以下のサンプルコードでは、指定したフォルダ内のすべてのAVIファイルを変換します。
import os
from moviepy.editor import VideoFileClip
# AVIファイルが格納されているディレクトリ
input_dir = "input_videos"
output_dir = "output_videos"
# ディレクトリ内のすべてのAVIファイルを一括変換
for filename in os.listdir(input_dir):
if filename.endswith(".avi"):
avi_file = os.path.join(input_dir, filename)
mp4_file = os.path.join(output_dir, filename.replace(".avi", ".mp4"))
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264")
[MoviePy] Writing video output_video1.mp4
[MoviePy] Done.
[MoviePy] Writing video output_video2.mp4
[MoviePy] Done.
メタデータの保持・削除
動画のメタデータを保持したり削除したりすることもできます。
以下のサンプルコードでは、メタデータを保持してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_metadata.mp4"
# 動画を読み込み、メタデータを保持して保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx264", metadata={"title": "My Video", "author": "Author Name"})
[MoviePy] Writing video output_video_metadata.mp4
[MoviePy] Done.
このように、Pythonを使用してAVIファイルをMP4形式に変換する際には、解像度、フレームレート、ビットレート、複数ファイルの一括変換、メタデータの保持・削除など、さまざまなオプションを設定することができます。
エラーハンドリングとデバッグ
変換中に発生する一般的なエラー
動画の変換中には、いくつかの一般的なエラーが発生することがあります。
以下は、よく見られるエラーの例です。
エラー内容 | 原因 |
---|---|
FileNotFoundError | 指定したAVIファイルが存在しない |
OSError | コーデックがインストールされていない |
ValueError | 不正な引数(解像度やビットレートなど) |
PermissionError | 出力先フォルダに書き込み権限がない |
エラーメッセージの読み方
エラーメッセージは、問題の特定に役立ちます。
以下のポイントに注意して読み解きましょう。
- エラータイプ: どの種類のエラーが発生したか(例:
FileNotFoundError
) - 行番号: エラーが発生したコードの行番号
- メッセージ内容: エラーの詳細な説明(例: “No such file or directory”)
これらの情報をもとに、問題を特定し、修正する手がかりを得ることができます。
変換が途中で止まる場合の対処法
変換が途中で止まる場合、以下の対処法を試みることができます。
- メモリの確認: 使用中のメモリが不足している場合、変換が停止することがあります。
不要なアプリケーションを閉じてメモリを解放します。
- ファイルの確認: 入力ファイルが破損していないか確認します。
別のプレーヤーで再生してみてください。
- コーデックの確認: 使用しているコーデックが正しくインストールされているか確認します。
必要に応じて再インストールします。
- ログの確認: 変換時のログを確認し、エラーの原因を特定します。
出力ファイルが再生できない場合の対処法
出力ファイルが再生できない場合、以下の対処法を試みることができます。
- コーデックの確認: 再生に必要なコーデックがインストールされているか確認します。
特にH.265やAV1などの新しいコーデックは、再生環境によってはサポートされていないことがあります。
- ファイル形式の確認: 出力ファイルの拡張子が正しいか確認します。
MP4形式で保存されているか確認してください。
- プレーヤーの変更: 使用しているメディアプレーヤーがファイル形式をサポートしているか確認します。
VLCメディアプレーヤーなど、幅広い形式に対応したプレーヤーを使用することをお勧めします。
- 再変換: 変換時の設定を見直し、再度変換を試みます。
特にビットレートやコーデックの設定を確認してください。
これらの対処法を試すことで、エラーを解決し、スムーズに動画の変換を行うことができるでしょう。
応用例:特定の用途に合わせた変換
Web用に最適化したMP4ファイルの作成
Web用に最適化されたMP4ファイルは、ファイルサイズが小さく、読み込み速度が速いことが求められます。
以下のサンプルコードでは、解像度を640×360に設定し、ビットレートを800kbpsに調整してWeb用に最適化したMP4ファイルを作成します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_web.mp4"
# 動画を読み込み、解像度とビットレートを設定して保存
with VideoFileClip(avi_file) as video:
video_resized = video.resize(newsize=(640, 360)) # 解像度を640x360に変更
video_resized.write_videofile(mp4_file, codec="libx264", bitrate="800k")
[MoviePy] Writing video output_video_web.mp4
[MoviePy] Done.
スマートフォン向けの動画変換
スマートフォン向けの動画は、解像度やビットレートをデバイスに合わせて調整する必要があります。
以下のサンプルコードでは、解像度を1280×720に設定し、ビットレートを1500kbpsに調整してスマートフォン向けのMP4ファイルを作成します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_mobile.mp4"
# 動画を読み込み、解像度とビットレートを設定して保存
with VideoFileClip(avi_file) as video:
video_resized = video.resize(newsize=(1280, 720)) # 解像度を1280x720に変更
video_resized.write_videofile(mp4_file, codec="libx264", bitrate="1500k")
[MoviePy] Writing video output_video_mobile.mp4
[MoviePy] Done.
高品質な動画を低容量で保存する方法
高品質な動画を低容量で保存するためには、H.265コーデックを使用することが効果的です。
以下のサンプルコードでは、H.265コーデックを使用してAVIファイルをMP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_high_quality.mp4"
# 動画を読み込み、H.265コーデックで保存
with VideoFileClip(avi_file) as video:
video.write_videofile(mp4_file, codec="libx265")
[MoviePy] Writing video output_video_high_quality.mp4
[MoviePy] Done.
動画のトリミングと変換を同時に行う方法
動画の特定の部分だけをトリミングして変換することも可能です。
以下のサンプルコードでは、動画の開始時間を10秒、終了時間を30秒に設定してトリミングし、MP4形式に変換します。
from moviepy.editor import VideoFileClip
# AVIファイルを読み込む
avi_file = "input_video.avi"
mp4_file = "output_video_trimmed.mp4"
# 動画を読み込み、トリミングして保存
with VideoFileClip(avi_file) as video:
trimmed_video = video.subclip(10, 30) # 10秒から30秒までトリミング
trimmed_video.write_videofile(mp4_file, codec="libx264")
[MoviePy] Writing video output_video_trimmed.mp4
[MoviePy] Done.
これらの応用例を参考にすることで、特定の用途に合わせた動画の変換が可能になります。
目的に応じて解像度やビットレート、コーデックを調整し、最適な動画ファイルを作成しましょう。
まとめ
この記事では、Pythonを使用してAVI形式の動画をMP4形式に変換する方法について詳しく解説しました。
具体的には、H.264、H.265、AV1コーデックを用いた変換方法や、解像度、フレームレート、ビットレートの調整、さらには複数ファイルの一括変換やメタデータの管理についても触れました。
これらの知識を活用することで、特定の用途に応じた動画ファイルを効率的に作成することが可能です。
ぜひ、実際に手を動かして動画変換を試みて、さまざまな設定を試してみてください。