iPhoneで作成した動画をNAS経由でテレビ視聴する際の縦横比問題への対処

こんにちは、ヒガシです。

 

スポンサーリンク

まずは事の発端を解説

私も妻もiPhoneを使っており、子供の動画をよく撮影するんですが、容量がすぐにいっぱいになって困っていました。

 

ということでNASというネットワークに接続できるハードディスクみたいなものを導入しました。

さらにそのNASとテレビを接続することによってiPhoneで撮影した動画をテレビで視聴できるように環境を構築しています(もちろん自宅PCからも視聴可能です)。

 

しかしながら以下の画像のようにiPhoneを縦向きにして動画撮影したときに限り、テレビ視聴しようとすると動画が回転&縦横比も変な感じになってしまい、とても見れたものではなくなってしまうという現象が生じていました。(この問題はかれこれ数年前からわかっていたことです。)

 

まぁPCで見れば問題なく再生でき、動画自体の保存はうまくいっているっぽかったので特段気にしてはいなかったのですが、最近とった動画をどうしてもテレビで見たくなってしまったので、この問題に対処せざるを得なくなったというわけです。

 

スポンサーリンク

まずは原因を考察してみた

ただiPhoneを縦方向にして撮影した動画すべてにこの異常が発生するわけではなく、妻のiPhoneで撮影後、LINE経由で私のiPhoneに保存した動画については縦方向撮影でも問題なくNAS経由でテレビ視聴することができていました。

 

また、iPhoneで動画を撮影すると.MOVというファイル形式で保存されているみたいなのですが、LINE経由で保存するとMP4形式に変換されているということもわかりました。

 

ということで

MP4形式に変換すればテレビ視聴ができるのでは?

という仮説を立て実際に検証してみました。

 

スポンサーリンク

MOVファイルをMP4形式に変換する方法

ということでやり方を調べたところ以下を発見。

MOVからMP4へ変換すーる(Python) #Python – Qiita

 

ほんとPythonはなんでもできますね。

 

試しに一つの動画に対してMP4化を適用したところ見事に予想的中。

問題なくテレビで視聴できるようになりました。

 

ということで上記記事をアレンジして既存のNASに保存されているMOVファイルをひとつずつMP4形式に変換&変換後は元のMOVファイルを削除するというプログラムを作成しました。

from moviepy.editor import VideoFileClip
import glob
import os
from pathlib import Path
def convert_mov_to_mp4(movie_name,output_path):
# 入力ファイルと出力ファイルを指定
    input_file = movie_name + '.MOV'
    output_file = movie_name + '.mp4'
    # 動画情報を取得
    video_clip = VideoFileClip(output_path + input_file)
    # 解像度を取得
    width = video_clip.size[0]
    height = video_clip.size[1]
    rotation = video_clip.rotation
    fps = video_clip.fps
    duration = video_clip.duration
    print("video_clip.size:", width, height, rotation, fps, duration)
    # MOV動画をMP4に変換して保存
    if rotation == 90:
        video_clip.write_videofile(output_path + output_file, codec='libx264', ffmpeg_params=["-vf", f"scale={height}:{width}"])
    else:
        video_clip.write_videofile(output_path + output_file, codec='libx264', ffmpeg_params=["-vf", f"scale={width}:{height}"])


#動画が保存されているNASのフルパスを指定する
movie_path = 'Z:\\movie_test\\'
mov_files =  glob.glob(movie_path + '*.MOV')
for mov in mov_files:
    file_name = Path(mov).stem
    print(file_name)
    convert_mov_to_mp4(file_name,movie_path)
    #MP4ファイルに変更後にMOVファイルを削除する
    os.remove(mov)

 

ひとつひとつの処理は時間がかかりますが、一晩実行しておいたところ問題なくすべての動画をMP4に変換することができました。

 

それではまた!

コメント

タイトルとURLをコピーしました