ぬの部屋(仮)
nu-no-he-ya
  •    1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28      
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
    1234567
    891011121314
    15161718192021
    22232425262728
           
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
         12
    3456789
    10111213141516
    17181920212223
    242526272829 
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
        123
    45678910
    11121314151617
    18192021222324
    25262728   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    15161718192021
    293031    
           
         12
    3456789
    10111213141516
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728     
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
          1
    2345678
    9101112131415
    16171819202122
    232425262728 
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
  • ImageMagick+ffmpeg+Pythonで比較動画を作る

    0.ImageMagickで画像を横に並べる方法

    magick convert +append  [画像1ファイル名]   [画像2ファイル名]   [出力ファイル名]

    具体例:

    magick convert +append glass.png metalic.png ret.jpg

    1.Pythonで「ディレクトリ内の全ての画像に対して」ImageMagickをかける

    上記、magickのappendを、ディレクトリの中の全ての画像に対して行う関数を作成する。

    このスクリプトで”glass/”ディレクトリと”metalic/”ディレクトリ内の連番画像をappendでつなげて”appends/”ディレクトリへ保存する

    import subprocess  # コマンドラインを実行する
    import os          # パス文字列の操作など
    import glob        # ファイル一覧取得など
    
    ############################################
    ############################################
    
    ##
    # @brief 画像データを横に二つ並べる処理を全ての画像に対して行う
    # @param [in] dir_left 左側に配置する画像が存在するディレクトリ
    # @param [in] dir_right 右側に配置する画像が存在するディレクトリ
    # @param [in] dir_out 出力先のディレクトリ
    def image_append(dir_left , dir_right , dir_out):
    
      # 各ディレクトリの中のファイル一覧
      L_images = glob.glob(dir_left  + "/*.png", recursive=True)
      R_images = glob.glob(dir_right + "/*.png", recursive=True)
    
      # L_images,R_imagesのリストの要素をそれぞれiL,iRとして
      for(iL,iR) in zip(L_images,R_images):
      
        # 拡張子なしの left側のファイル名を取得
        oname = os.path.splitext(os.path.basename(iL))[0]
        
        # 出力ファイル名作成
        opathname = dir_out + "/" + oname + ".png"
        
        
        # コマンド作成
        command = "magick convert +append " + iL + " " + iR + " " + opathname
    
        # 作成したコマンドの確認
        print(command)
        
        # コマンドの実行
        subprocess.call(command)
    
    
    ############################################
    ############################################
    
    # 連番画像作成 引数は全てディレクトリ名
    image_append("glass" , "metalic" , "appends")
    

    2.連番画像を動画にするffmpegをPythonから呼び出す

    これ単体ならわざわざPythonから呼び出す必要はないが、上記スクリプトに続けて呼び出したいのでPythonからcallする。

    import subprocess  # コマンドラインを実行する
    import os          # パス文字列の操作など
    import glob        # ファイル一覧取得など
    
    
    ############################################
    ############################################
    
    ##
    # @brief 連番画像から動画を作成
    # @param [in] source 画像の場所とファイル名のパターン
    # @param [in] outFileName 出力ファイル名
    # @param [in] startNumber 画像の連番の開始番号
    def mp4out(source,outFileName,startNumber):
    
      # コマンド作成
      command = f'ffmpeg -start_number {startNumber} -r 15 -i {source} -vcodec libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -framerate 60 {outFileName}'
    
      # コマンドの実行
      subprocess.call(command)
    
    
    ############################################
    ############################################
    
    
    # 動画作成 ファイル名、出力ファイル名、連番の最初の番号
    mp4out("appends/%04d.png","out.mp4",1)
    

    3.まとめ

    構成

    C:\TEST\DATA
    │  compmv.py ... pythonスクリプト
    │  out.mp4   ... ffmpegで生成した動画ファイル。mp4outで生成される
    │
    ├─appends
    │      0000.png
    │      0001.png
    │      0002.png
    │      0003.png
    │      0004.png
    │      .... 結合済み画像 image_appendで出力される
    │
    ├─glass
    │      0001.png
    │      0002.png
    │      0003.png
    │      0004.png
    │      .... 連番画像1
    │
    └─metalic
            0001.png
            0002.png
            0003.png
            0004.png
            .... 連番画像2
    
    

    スクリプト全体

    import subprocess  # コマンドラインを実行する
    import os          # パス文字列の操作など
    import glob        # ファイル一覧取得など
    
    ############################################
    ############################################
    
    
    ##
    # @brief 画像データを横に二つ並べる処理を全ての画像に対して行う
    # @param [in] dir_left 左側に配置する画像が存在するディレクトリ
    # @param [in] dir_right 右側に配置する画像が存在するディレクトリ
    # @param [in] dir_out 出力先のディレクトリ
    def image_append(dir_left , dir_right , dir_out):
    
      # 各ディレクトリの中のファイル一覧
      L_images = glob.glob(dir_left  + "/*.png", recursive=True)
      R_images = glob.glob(dir_right + "/*.png", recursive=True)
    
      # L_images,R_imagesのリストの要素をそれぞれiL,iRとして
      for(iL,iR) in zip(L_images,R_images):
      
        # 拡張子なしの left側のファイル名を取得
        oname = os.path.splitext(os.path.basename(iL))[0]
        
        # 出力ファイル名作成
        opathname = dir_out + "/" + oname + ".png"
        
        
        # コマンド作成
        command = "magick convert +append " + iL + " " + iR + " " + opathname
    
        # 作成したコマンドの確認
        print(command)
        
        # コマンドの実行
        subprocess.call(command)
    
    
          
    ############################################
    ############################################
    
    
    ##
    # @brief 連番画像から動画を作成
    # @param [in] source 画像の場所とファイル名のパターン
    # @param [in] outFileName 出力ファイル名
    # @param [in] startNumber 画像の連番の開始番号
    def mp4out(source,outFileName,startNumber):
    
      # コマンド作成
      command = f'ffmpeg -start_number {startNumber} -r 15 -i {source} -vcodec libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -framerate 60 {outFileName}'
    
      # コマンドの実行
      subprocess.call(command)
    
    ############################################
    ############################################
    
    # 連番画像作成
    image_append("glass" , "metalic" , "appends")
    
    # 動画作成
    mp4out("appends/%04d.png","out.mp4",1)
    

    結果