TVer, NHK+などのts動画ファイルをm2tsファイルに変換 | むかし日記

むかし日記

僕の古い日記です。

●目 的

TVer, NHK+などのインターネット上のts動画ファイルをBlu-rayディスクで再生可能なm2tsファイルに変換する。

 

●動画ファイルの変換に必要なプログラム

・ffprobe : 動画情報の取得に必要。ffmpegをインストールすると同封されている。

・ffmpeg:動画ファイルの変換に必要。

※ffmpegの取得

最新のffmpegは,m2tsファイルへの動画変換では音声aacをサポートしていないので,音声をaacに指定すると作成したm2tsファイルは音声が出ない。

しかしながら,m2tsファイルでaacをサポートするようにビルドされた古いffmpegが存在する。

ただし,Linux版ではなく,Windows版である。
以下のURLより古いffmpegをダウンロードする。


https://webradio.hinekure.net/ffmpeg/ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20200403-52523b6-win64-static.zip

 

m2tsファイルでaacをサポートしているヴァージョンのffmpegだとわかるように,

ffmpeg.exeの名前をffmpeg-20200403-52523b6-win64-static.exeに変更しておく。

 

●Blu-rayディスク作成に必要なプログラム

・BDAVMaker:Blu-rayディスクに格納するBDAVフォルダの作成に必要。

・ImgBurn:BDAVフォルダをBlu-rayディスクに焼き付けるために必要。

 

●インターネット上のts動画ファイルのダウンロードに必要なプログラム

・gyao_down.jar:TVer,NHK+等の動画ファイルのダウンロードに必要。

・Abema-DL1.bat:AbemaTV(無料)の動画ファイルのダウンロードに必要。

・4K Video Downloader:YoutubeのHD画質での動画ファイルのダウンロードに必要。

 

●動画の取得

(1) TVer

・gyao_down.jarをクリックする。

[メイン] ”動画単体を落とす”と”master.m3u8を直接入力”にチェックを入れる。

[設定2]  ”変換後の拡張子”を”ts”に書き換え,”ffmpegで直接mp4に落とす”のチェックを外す。

[設定保存] ”設定保存”をクリックする。

[メイン] 動画サイトのURL(https://tver.jp/episodes/epzdeu10dy など)をURLに張り付けると,TVerが自動的に開き,すぐ閉じることによってts動画のダウンロードが始まる。

※TVerが自動的に開いたまま閉じない場合

・開いたTVerの動画の窓の右上のXをクリックして閉じる。

・gyao_down.jarの[メイン] "kill"をクリックし,"終了"をクリックし,"開始"をクリックする。ダメな場合は,この手順を数回繰り返す。
(2) Youtube

・動画サイトのURLを4K Video Downloaderに張り付けてダウンロードする。

 

●各種動画ファイルの情報

ffprobeを使って,各種動画ファイルの情報を見よう。

【地上デジタルm2ts】

$ ffprobe -i TV.m2ts

Input #0, mpegts, from 'TV.m2ts':
  Duration: 00:04:32.54, start: 11288.727611, bitrate: 12084 kb/s
  Program 161
    Stream #0:0[0x111]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, top first), 1440x1080 [SAR4:3 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x112]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 195 kb/s
    Stream #0:2[0x114]: Subtitle: arib_caption (Profile A) ([6][0][0][0] / 0x0006)

 

【NHK+】

$ ffprobe -i nhk.ts
Input #0, mpegts, from 'nhk.ts':
  Duration: 00:58:59.57, start: 1.400000, bitrate: 1645 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(progressive), 960x540 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 66 kb/s


【TVer】

$ ffprobe -i TVer.ts

Input #0, mpegts, from 'TVer.ts':
  Duration: 00:19:29.03, start: 1.400000, bitrate: 3002 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709/unknown/unknown, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 71 kb/s


【AbemaTV】

$ ffprobe -i Abema.ts

Input #0, mpegts, from 'Abema.ts':
  Duration: 00:02:47.16, start: 1.443511, bitrate: 4322 kb/s
  Program 1
    Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9],
 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 204 kb/s
    Stream #0:2[0x102]: Data: timed_id3 (ID3  / 0x20334449)

 

【Youtube】

$ ffprobe -i Youtube.ts

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Youtube.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
  Duration: 00:20:50.84, start: 0.000000, bitrate: 3126 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2991 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

 

【古いbilibili】

$ ffprobe -i Bilibili.flv

Input #0, flv, from 'Bilibili.flv':
  Metadata:
    description     : Packed by Bilibili XCoder v1.0(fixed_gap:False)
    metadatacreator : Yet Another Metadata Injector for FLV - Version 1.9
    hasKeyframes    : true
    hasVideo        : true
    hasAudio        : true
    hasMetadata     : true
    canSeekToEnd    : false
    datasize        : 87843630
    videosize       : 77677451
    audiosize       : 10049363
    lasttimestamp   : 400
    lastkeyframetimestamp: 392
    lastkeyframelocation: 85960158
  Duration: 00:06:39.85, start: 0.067000, bitrate: 1757 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 1280x720 [SAR 1:1 DAR 16:9], 1551
kb/s, 29.97 fps, 29.97 tbr, 1k tbn, 23976 tbc
    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 197 kb/s

 

【現在のbilibili】

残念ながら,現在,Chromeでダウンロードできない仕様とされている。


以上の情報をまとめると,以下の表のようになる。

 

 

(1) TVer, NHK+, AbemaTV, Youtubeからダウンロードしたts(mp4)ファイルをBlu-rayディスク用のm2tsファイルに変換する場合

TVer, NHK+のtsファイルのVideo の fps, tbr, tbn, tbc, Audio の周波数の数値が,地デジTVのm2tsファイルのそれらと同じであることがわかる。

以下のコマンドでBlu-rayディスク用のm2tsに変換する。

 

.\ffmpeg-20200403-52523b6-win64-static -i TVer.ts(youtube.mp4) -vf scale=-1:1080 -vb 17000k -acodec ac3 -b:a 192k -ar 48k -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv TVer.m2ts(youtube.m2ts)

 

(2) TVer, NHK+, AbemaTV, Youtubeからダウンロードしたts(mp4)ファイルを地デジm2tsと同じピクセルに変換する場合

.\ffmpeg-20200403-52523b6-win64-static -i TVer.ts -vf scale=1440:1080 -vb 17000k -acodec ac3 -b:a 192k -ar 48k -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -r 29.97 -framerate 29.97 Tver.m2ts

 

(参考,いまのBiliBiliはflvではない。)

古いBiliBiliでの動画ファイルはたいてい,複数のflvファイルに分割されている。

したがって,複数のflvファイルを結合して,1つのflvファイルを作成する必要がある。

まず,以下のようなテキストファイルを上から結合する順番でflvファイル名を記述して作成する。

テキストファイル flv.txt を以下のように作成し,ffmpegと複数のflvファイルと同じディレクトリに保存する。
file 'Bilibili-1.flv'
file 'Bilibili-2.flv'
file 'Bilibili-3.flv'

以下のコマンドによって,複数のflvファイルを無劣化結合する。
ffmpeg -safe 0 -f concat -i flv.txt -c:v copy -c:a copy -map 0:v -map 0:a Bilibili.flv

 

[オプションのだいたいの意味]
-vf    : ピクセルの変更時に使用する。-1はオリジナルのアスペクト比を維持することを意味する。

-vb    : ビットレート変更時に使用する。単位はb/sであり,kはキロ,つまり*1000という意味である。
-acodec: 

copy ⇒ 元の音声がaac(LC)でm2tsの音声がaac(LC)であるので,"-acodec copy"でよいと考えられるが,m2tsを作成すると,ブルーレイディスクの番組の音声が出ない。理由は不明。

aac ⇒ "-acodec aac"としてm2tsを作成すると,若干音ズレが起きる場合がある。

ac3 ⇒ "-acodec ac3"としてm2tsを作成すると,音ズレが解消される場合が多い。

↑-acodecは,framerateとも関係するため,このオプション単独では何とも言えない。

-pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv: このオプションは動画の色情報の指定であり, 元の動画ファイルのyuv420p(progressive)から地デジとBSデジタルの yuv420p(tv, bt709, progressive)への変換の設定である。

-r 29.97 -framerate 29.97  : fps, tbr, tbn, tbc の数値を地デジのそれらに一致させる設定である。

-

●BDAVフォルダの作成

BDAVMakerを使って,Blu-rayディスク用のフォルダ構造を作成する。

NHK+とTVerの動画の場合には,番組名,番組放送日時,内容をあらかじめインターネットで検索して,メモ帳にでも張り付けておく。

BDAVMakerで各m2tsファイルのタイトル(番組名),放送日時などをさきほどのメモ帳からコピー&ペーストで張り付ける。

「作成」ボタンをクリックすると,BDAVフォルダを作成してくれる。

 

●Blu-rayディスクへの焼き付け

ImgeBurnを使って,Blu-rayディスクへBDAVフォルダを焼き付ける。

BDAVフォルダを指定して,4回ほどEnterキーを押すと,焼き付けが始まる。

焼き付けが終わると,勝手にBlu-rayディスクからディスクが吐き出される。

 

●コメント

インターネット上の動画からBlu-rayディスクを作成する情報はあまり書かれていない。

そこで,既存のフリーソフトウェアを使って,試みたことをここに記述した。

なお,動画変換で一番問題となる音ズレについては言及していないが,tsとm2tsの相性がよいのか上述の方法で明らかな音ズレは起きていない。

 

ffmpegは非常に強力な道具であり,自身の仕事でも数千枚のグラフの画像ファイルを結合して,アニメーションを作成するために使っている。