[Python] avi形式をmp4形式に変換する方法(h.264/h.265/AV1)

PythonでAVI形式の動画をMP4形式に変換するには、ffmpegmoviepyライブラリを使用するのが一般的です。

ffmpeg-pythonはPythonからffmpegを簡単に操作できるラッパーです。

moviepyはffmpegを使用するため、ffmpeg-pythonのインストールなどで、ffmpegを使えるようにしておく必要があります。

まず、ffmpegをインストールし、次にffmpeg-pythonをインストールします。

変換時にコーデックを指定することで、H.264、H.265、AV1などのエンコードが可能です。

このページでは、Pythonからffmpegを扱いやすくしたmoviepyを使用した方法を紹介します。

この記事でわかること
  • AVIファイルをMP4形式に変換する方法
  • コーデックやビットレートの設定
  • 動画の解像度やフレームレート調整
  • エラーハンドリングのポイント
  • 特定用途に応じた変換の応用例

目次から探す

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”)

これらの情報をもとに、問題を特定し、修正する手がかりを得ることができます。

変換が途中で止まる場合の対処法

変換が途中で止まる場合、以下の対処法を試みることができます。

  1. メモリの確認: 使用中のメモリが不足している場合、変換が停止することがあります。

不要なアプリケーションを閉じてメモリを解放します。

  1. ファイルの確認: 入力ファイルが破損していないか確認します。

別のプレーヤーで再生してみてください。

  1. コーデックの確認: 使用しているコーデックが正しくインストールされているか確認します。

必要に応じて再インストールします。

  1. ログの確認: 変換時のログを確認し、エラーの原因を特定します。

出力ファイルが再生できない場合の対処法

出力ファイルが再生できない場合、以下の対処法を試みることができます。

  1. コーデックの確認: 再生に必要なコーデックがインストールされているか確認します。

特にH.265やAV1などの新しいコーデックは、再生環境によってはサポートされていないことがあります。

  1. ファイル形式の確認: 出力ファイルの拡張子が正しいか確認します。

MP4形式で保存されているか確認してください。

  1. プレーヤーの変更: 使用しているメディアプレーヤーがファイル形式をサポートしているか確認します。

VLCメディアプレーヤーなど、幅広い形式に対応したプレーヤーを使用することをお勧めします。

  1. 再変換: 変換時の設定を見直し、再度変換を試みます。

特にビットレートやコーデックの設定を確認してください。

これらの対処法を試すことで、エラーを解決し、スムーズに動画の変換を行うことができるでしょう。

応用例:特定の用途に合わせた変換

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.

これらの応用例を参考にすることで、特定の用途に合わせた動画の変換が可能になります。

目的に応じて解像度やビットレート、コーデックを調整し、最適な動画ファイルを作成しましょう。

よくある質問

変換速度を速くする方法は?

変換速度を速くするためには、以下の方法を試すことができます。

  • コーデックの選択: H.264コーデックは、H.265よりも変換速度が速いです。

必要に応じてコーデックを選択しましょう。

  • 解像度の調整: 高解像度の動画は処理に時間がかかります。

解像度を下げることで変換速度を向上させることができます。

  • マルチスレッド処理: moviepyライブラリでは、threadsオプションを使用してマルチスレッド処理を有効にすることができます。

これにより、CPUのコアを最大限に活用できます。

  • 不要なエフェクトの削除: トリミングやエフェクトの適用を最小限にすることで、変換時間を短縮できます。

変換後のファイルサイズが大きいのはなぜ?

変換後のファイルサイズが大きくなる原因はいくつかあります。

  • ビットレートの設定: ビットレートが高すぎると、ファイルサイズが大きくなります。

適切なビットレートを設定することが重要です。

  • コーデックの選択: H.265コーデックは高圧縮率ですが、H.264よりもファイルサイズが大きくなることがあります。

使用するコーデックを見直しましょう。

  • 解像度の設定: 高解像度の動画はファイルサイズが大きくなります。

必要に応じて解像度を下げることを検討してください。

  • 音声コーデック: 音声コーデックの設定もファイルサイズに影響します。

AACなどの圧縮音声コーデックを使用することをお勧めします。

変換後の画質が悪くなるのを防ぐには?

変換後の画質を保つためには、以下のポイントに注意しましょう。

  • ビットレートの設定: ビットレートを適切に設定することで、画質を維持できます。

高すぎるとファイルサイズが大きくなり、低すぎると画質が悪化します。

  • コーデックの選択: H.265コーデックを使用することで、同じ画質でファイルサイズを小さくすることができます。

画質を重視する場合は、コーデックの選択が重要です。

  • 解像度の調整: 元の動画の解像度を維持するか、必要に応じて少し下げることで、画質を保つことができます。
  • エンコード設定の見直し: moviepywrite_videofileメソッドで、presetオプションを使用してエンコードの速度と画質のバランスを調整できます。

例えば、preset='slow'を指定すると、画質が向上しますが、変換に時間がかかります。

これらのポイントを考慮することで、変換後の画質を維持しつつ、最適な動画ファイルを作成することができます。

まとめ

この記事では、Pythonを使用してAVI形式の動画をMP4形式に変換する方法について詳しく解説しました。

具体的には、H.264、H.265、AV1コーデックを用いた変換方法や、解像度、フレームレート、ビットレートの調整、さらには複数ファイルの一括変換やメタデータの管理についても触れました。

これらの知識を活用することで、特定の用途に応じた動画ファイルを効率的に作成することが可能です。

ぜひ、実際に手を動かして動画変換を試みて、さまざまな設定を試してみてください。

  • URLをコピーしました!
目次から探す