2017年7月6日木曜日

私にもできた!ビデオテープをコンパクトにデジタル化<②変換編>



前回の『私にもできた!ビデオテープをコンパクトにデジタル化<①取込編> 』で書いたように、大量のビデオテープをコンパクトにデジタル化する手順についての記事をまとめています。今回は下記表の「②変換編」になります。
タイトル概要使用する主なアイテム時間の目安
①取込編大量のビデオテープをPCに取り込むビデオキャプチャー機器6時間テープであれば、取込にも6時間かかる
②変換編取り込んだデータをffmpegを用いてH.265規格のmp4に圧縮変換自作Powershellプログラム
(コマンド実行を自動化)
変換には①以上の時間がかかる
(私の場合、6時間テープは9時間ぐらい)

ビデオカード購入で10倍に高速化
6時間テープは90分ぐらい
③保存編動画をサムネイル静止画で分割キャプチャにして、動画とともにブルーレイディスクに書き込み保存自作Powershellプログラム(23.032GB単位にフォルダ仕訳)ブルーレイディスク1枚への書き込みに2時間ぐらいかかるソフトを変えたら早ければ25分ぐらい


「ffmpeg」というツールを利用することで、ビデオテープから取り込んだデータを10分の1サイズに圧縮変換したH.265規格のmp4ファイルにコマンドを用いて変換することができます。
ただ、毎回コマンドを実行するのは面倒なので、処理を連続して行えるように、Powershellでプログラムを作成しました。

仕様とプログラムを公開しますので、ご自由にご利用ください。但し、すべて自己責任でお願いします。

エンコードについて

ソフトウェアエンコードについて

・H.265という規格は2013年に承認された次世代のビデオコーデックらしいです。詳しいことはわかりませんが、圧縮率がすごいです。
私の場合、H264形式のmpgやmp4が10分の1サイズに圧縮変換できます。
H.264(AVC)対H.265(HEVC)、H264とH265ファイルの違いは何ですか?
・一般的に動画変換をすると、映像が劣化したり、音声がずれたりすることがあるようです。PCのスペックによっても結果は異なると思いますが、私の環境では映像が劣化したような印象や音声のずれを感じたことは、いまのところありません。

・私の中古PC<CPU: Corei5-650 3.2GHz メモリ:8GB)>では、変換処理にかなり時間がかかり、「6時間分の録画テープのデータ」を変換するのに、8.5~9時間ぐらいかかっていましたが、グラフィックカードの取り付けることで、とんでもなく変換処理が速くなりました。

省スペースPCにも取り付けられるグラフィックカードについて

・私の中古PCは「HP Compaq 8100 Elite SF」という省スペースサイズのものですが、これまでグラフィックカードは大き目のタワー型のサイズでないと、カードの大きさや電源容量の制限により、取り付けることはできませんでした。
image_thumb
・ただ最近ではありがたいことに、「GeForce GTX 1050Ti」には省スペースサイズのデスクトップPCでも取り付けられるサイズのものが販売されており、それを取り付けることで、約10倍の速度で変換ができるようになりました。

※注意点としては、このグラフィックカードはPCI Expressスロットに取り付けますが、スロット2つ分のスペースを使うため、取り付けられるところが限定されます。私のPCにはPCI Expressスロットが2つあり、既に一つ目にはUSB3.1のカードを取り付けていたので、残りのPCI Expressに取り付けようとすると、CPUクーラーにちょっと干渉してしまいました。CPUクーラーを押すかたちでかなり強引に取り付けましたが、全長が短いものが他にもでているので、よく調べたほうが良いと思います。
カード長145mm、コンパクトなGEFORCE GTX 1050 Ti GPU搭載カード

ffmpeg

・動画変換には、ffmpegというソフトを使用します。無料で利用できます。(以前はこういうソフトは高額だったのに、ありがたいです)
動画処理の定番ツール「FFmpeg」ことはじめ – Qiita
・こちらからダウンロードできます。プログラムはexe形式で、インストールすることなく、コマンドラインで利用します。
http://ffmpeg.zeranoe.com/builds/

image
・ちなみに「Handbrake」というソフトもあり、DVDのisoデータを字幕付きで、H.265規格に変換することができます。このソフトを使ったPowershellのプログラムも用意しており、改めて別の記事にてご紹介します。
事前準備

ffmpegのフォルダ準備

・fffmpegをダウンロードしたら、適当なフォルダ(例.F:\Video_tool)に「ffmpeg」というフォルダ名で格納します。
※フォルダ内では、 ffmpeg – bin – ffmpeg.exe  となるように格納します。
※ffmpeg は日本語に非対応のため、パスの途中で日本語文字があったり、フォルダ名に@マークが含まれていると動きません。
image

実行ファイルの格納

プログラムは次のページで公開しています。

・【プログラム】私にもできた!ビデオテープをコンパクトにデジタル化<②変換編>
https://it-setsuyaku.blogspot.jp/p/blog-page_25.html

上記ページで 公開している4つのファイルを準備して、ffmpegを配置したフォルダに次のように格納します。

①初期フォルダ作成処理.bat ・・・②を呼び出すファイル
②初期フォルダ作成処理.ps1 ・・・フォルダ構成を整える初回実行処理
③H265_henkan.bat ・・・④を呼び出すファイル
④H265_henkan.ps1 ・・・変換処理の実行ファイル


clip_image001[1]

『初期処理.bat』の実行

・初期処理.bat を実行すると、フォルダが自動で作成されます。

clip_image001[3]

実行後は、次のフォルダ構成となります。
※終了後、「初期処理.bat」と「初期処理.ps1」は消してよいです。

■フォルダ構成
01_henkanmoto : ビデオテープから取り込んだデータを格納します。ファイルがなくなると処理が終わります。
02_H265_file : 変化処理を行うと、こちらに圧縮変換されたファイルが格納されます
03_henkan_kanyrougo : 変換処理が終わると、「01_henkanmoto」からこのフォルダにファイルが移動します
04_logfile : バッチ画面のログ情報が出力されます
05_report : ffmpegの実行レポート情報が出力されます

clip_image002[1]
  

変換元データの格納

「01_henkanmoto」フォルダにビデオテープから取り込んだデータを格納します。


clip_image003[1]

※5時間分の長さの1ファイルで20GB以上と変換前はかなりサイズが大きくなっています。

このあと、いよいよ変換処理の実行です

変換処理ツールの実行

『H265_henkan.bat』の変換処理ツールを起動

(1) ffmpegは日本語に対応していないため、変換元のファイル名を変更します。

clip_image001

(2) 本ツールの実行フォルダに「日付判定.txt」が作成されます。

・バッチで指定している第1パラメータは、連続実行回数。第2パラメータは指定時刻で、過ぎたら次の処理には入らない設定としており、パラメータの指定時刻が現在時刻より小さい場合、翌日の指定時刻まで処理を実行する。

clip_image001[6]

(3)変換後ファイル格納先の「02_H265_file」フォルダにある最新の枝番を確認して、その次の枝番から変換処理を開始する

clip_image001[8]

・デフォルトでは30分毎に分割となるように設定しており、枝番は最大22までとしている
・ 開始時間と1800秒の値を変えることで、ビデオ変換の長さを変えることが可能
・変換後のファイルのサイズが小さかったり、短かったらそのファイルを削除している
 (1MB以下、長さが30分で35MB以下、5分以内で6MB以下)

clip_image001[1]

(4)変換後ファイル格納先の「02_H265_file」フォルダに枝番付きのファイルが格納されていく。

 (変換前は20GB以上のファイルが合計2GB以下に圧縮変換されていることがわかる)

clip_image001[3]

(5)1つ目の変換元ファイルの処理が終わると「03_henkan_kanyrougo」にファイルを移動し、「変換完了.txt」に情報を記録して、2つ目の変換元ファイルの処理に移る

clip_image001[1]

(6)変換処理は次の条件を満たすと次の処理には入らず終了となる

・バッチ第一パラメータの連続処理実行回数を超えた場合
・バッチ第二パラメータの指定時刻を過ぎた場合
・Ctrl j のボタンを押した場合
・変換元フォルダに対象ファイルが無い場合

(7)その他の仕様については、H265_henkan.ps1 の ツール概要のコメントも参照ください。

■ツールの概要に書いてあること
・ログ出力、レポート出力
・電源オプション

・ffmpeg のパラメータの指定で「-vcodec libx265 」とするとソフトウェアエンコード(30 fps程度)となり、ビデオカードを取り付て「-vcodec hevc_nvenc 」とした場合、ハードウェアエンコードを用いての変換となり、10倍速(300fps以上)の速度となる

参考にさせて頂いたサイト

ありがとうございました。


・Powershellのバッチからの実行

PowerShellのExecutionPolicyのスコープとかについて詳しく - Qiita

・ログ出力

[PowerShell実践] 第2回 メッセージをログファイルにも出力する

・hevc_nvenc  のコマンドについて

NVEncで超高速エンコードにFFmpegで再挑戦!今度はうまくいった

・Ctrl+j について

PowerShell - (powershell)キーコマンドによる無限ループ終了


次回の予告


今回の記事は書いていて疲れてしまったので、量はあるものの、個々でみるとざっくりとした説明となりました。


次回は『私にもできた!ビデオテープをコンパクトにデジタル化<③保存編> 』となります。

ブルーレイディスクに23.2GB単位で保存していく手順や動画をサムネイル化してEvernoteに保存する手順をご説明します。
  
  
  
以上、参考になれば幸いです。