中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法


投稿日:2019年4月11日
  • 1
  • 0


我が家では「SV3C」という監視カメラを導入しています。アマゾンで安価に販売されている中華製の監視カメラです。

説明書の日本語がおかしかったり、必要な情報が見つけにくいなど、設置に難はあるものの性能は申し分ありません。
しかしこのカメラには設置の難しさだけでなく、もう一つ問題があります。
保存した動画を再生できるのは専用のプレーヤーだけという点です。唯一再生できるのはHIPlayerというプレーヤーです。これでは動画の共有が困難です。

解決策を調べていてわかったのですが、安価な中華製監視カメラではよくあることのようです。
では、なぜ謎の動画形式を採用するのか調べると、H.264のライセンス料が関係しているようです。中華メーカーが1円でも安く監視カメラを販売するためにとった苦肉の策です。
つまり、監視カメラのメーカーがわざと再生できない動画を作成しているというのが実情のようです。

ただし、謎の形式とは言ってもファイルのヘッダを操作しているだけで、実態はH.264形式です。ヘッダ情報を書き換えれば一般のプレーヤーで再生可能です。問題はその方法ですが、すでに海外では対策ソフトが公開されています。

Cheap Chinese camera garbled .264 files

ページ中程にある「convert.exe」という文字をクリックしてダウンロードしてください。

使い方は簡単で、このソフトに動画ファイルをドラッグすれば同じフォルダに一般のプレーヤーで再生できる形式のファイルを書き出してくれます。

例)
input.h264をドラッグするとinput.h264.mp4input.h264.wmvの二種類が出力される。

これで万事解決かと言われるとそうでもなく、私の環境ではなぜか倍速で再生される動画が書き出されます。


倍速になってしまった動画を通常の速度へ変更する方法

ここからは中華製の監視カメラとは関係なく、ただの動画エンコードの話です。お気に入りのエンコーダーがある場合はそちらを利用してください。
私の場合はコマンドラインで簡単にエンコードできるffmpegを利用しました。

ffmpegのダウンロードページでWindowsマークをクリックしてダウンロードします。

中のファイルbinフォルダcドライブ直下に移動。
スタートメニューの隣の検索に「環境変数を編集」と入力し実行。

新規」で、変数に「ffmpeg」で値に「c://bin\ffmpeg」と入力してOKをクリック。

スタートメニューの隣の検索に「cmd」でコマンドプロンプトを起動。変換したいファイルのフォルダへ移動。

例)デスクトップへ移動する

$ cd Desktop

続いてffmpegで再生速度を半分にするコマンドを実行。

例)変換するファイル名が「input.h264.mp4」の場合

ffmpeg -i input.h264.mp4 -vf setpts=PTS/0.5 -af atempo=0.5 output.mp4

フォルダに出力されたoutput.mp4が変換された動画ファイルです。
ffmpegのコマンドについて解説すると長くなるので、ざっくり解説します。
-i input.h264.mp4」の部分が変換するファイル名の指定。
-vf setpts=PTS/0.5」の部分が動画の再生スピードに関する部分。1が等倍で、2が倍速。今回は0.5なので半分の速度に変換という意味です。
-af atempo=0.5」の部分が音声。数字の意味は上と同じです。
そして最後に出力ファイルの名前を指定しています。

ffmpegについて更に詳しく知りたい方は公式ページのDocumentationをご覧ください。

以下テストで書き出した際のffmpegの出力(クリックすると展開します)

cd C:\HIDownload\2019_01_08\MMMM-380810-DCEBF

C:\HIDownload\2019_01_08\MMMM-380810-DCEBF>ffmpeg -i A20190106_203030_203044.mp4 -vf setpts=PTS/0.5 -af atempo=0.5 A20190106_203030_203044_output.mp4
ffmpeg version 2.8.4 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Invalid UE golomb code
    Last message repeated 6 times
Input #0, h264, from 'A20190106_203030_203044.mp4':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709), 1280x960, 25 fps, 25 tbr, 1200k tbn, 50 tbc
No pixel format specified, yuvj420p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264 @ 054fb600] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 054fb600] profile High, level 3.2
[libx264 @ 054fb600] 264 - core 148 r2638 7599210 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'A20190106_203030_203044_output.mp4':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p(pc), 1280x960, q=-1--1, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.60.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
Invalid UE golomb code
    Last message repeated 1 times
frame=   59 fps=0.0 q=28.0 size=     156kB time=00:00:00.28 bitrate=4571.3kbits/frame=   83 fps= 75 q=28.0 size=     477kB time=00:00:01.24 bitrate=3148.6kbits/Invalid UE golomb code
frame=  101 fps= 63 q=28.0 size=     739kB time=00:00:01.96 bitrate=3088.1kbits/frame=  133 fps= 62 q=28.0 size=     889kB time=00:00:03.24 bitrate=2246.5kbits/Invalid UE golomb code
frame=  165 fps= 62 q=28.0 size=    1140kB time=00:00:04.52 bitrate=2065.8kbits/Invalid UE golomb code
frame=  195 fps= 62 q=28.0 size=    1496kB time=00:00:05.72 bitrate=2142.8kbits/frame=  213 fps= 58 q=28.0 size=    1637kB time=00:00:06.44 bitrate=2082.9kbits/Invalid UE golomb code
frame=  245 fps= 56 q=28.0 size=    2016kB time=00:00:07.72 bitrate=2139.2kbits/Invalid UE golomb code
    Last message repeated 1 times
frame=  285 fps= 59 q=28.0 size=    2182kB time=00:00:09.32 bitrate=1918.3kbits/frame=  313 fps= 58 q=28.0 size=    2586kB time=00:00:10.44 bitrate=2029.1kbits/Invalid UE golomb code
    Last message repeated 1 times
frame=  337 fps= 56 q=28.0 size=    2863kB time=00:00:11.40 bitrate=2057.4kbits/frame=  355 fps= 55 q=28.0 size=    3189kB time=00:00:12.12 bitrate=2155.5kbits/Invalid UE golomb code
    Last message repeated 1 times
frame=  379 fps= 54 q=28.0 size=    3520kB time=00:00:13.08 bitrate=2204.3kbits/frame=  407 fps= 54 q=28.0 size=    3791kB time=00:00:14.20 bitrate=2187.0kbits/frame=  407 fps= 50 q=-1.0 Lsize=    4119kB time=00:00:16.20 bitrate=2083.1kbits/s dup=203 drop=0
video:4114kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.129582%
[libx264 @ 054fb600] frame I:2     Avg QP:18.94  size:165622
[libx264 @ 054fb600] frame P:149   Avg QP:21.63  size: 23618
[libx264 @ 054fb600] frame B:256   Avg QP:26.12  size:  1413
[libx264 @ 054fb600] consecutive B-frames: 14.7%  1.0%  9.6% 74.7%
[libx264 @ 054fb600] mb I  I16..4:  6.7% 31.0% 62.3%
[libx264 @ 054fb600] mb P  I16..4:  1.9%  6.2%  3.2%  P16..4: 36.4%  3.8%  2.8%  0.0%  0.0%    skip:45.8%
[libx264 @ 054fb600] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 26.6%  0.6%  0.1%  direct: 0.4%  skip:72.2%  L0:63.4% L1:36.2% BI: 0.4%
[libx264 @ 054fb600] 8x8 transform intra:52.6% inter:25.1%
[libx264 @ 054fb600] coded y,uvDC,uvAC intra: 76.8% 60.8% 16.2% inter: 7.0% 9.4% 0.1%
[libx264 @ 054fb600] i16 v,h,dc,p: 14% 13% 19% 54%
[libx264 @ 054fb600] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 21% 23%  5%  4%  5%  4%  6%  7%
[libx264 @ 054fb600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 17% 16%  5%  7%  8%  5%  5%  6%
[libx264 @ 054fb600] i8c dc,h,v,p: 29% 24% 26% 22%
[libx264 @ 054fb600] Weighted P-Frames: Y:3.4% UV:2.7%
[libx264 @ 054fb600] ref P L0: 79.1%  6.5% 10.4%  3.8%  0.2%
[libx264 @ 054fb600] ref B L0: 85.2% 14.5%  0.3%
[libx264 @ 054fb600] ref B L1: 96.0%  4.0%
[libx264 @ 054fb600] kb/s:2069.82

以上、中華製監視カメラの映像を一般のプレーヤーで再生できるようにする方法でした。
はっきり言って、PCの操作になれない方にとっては難しい操作だと思います。

多少の煩わしさを甘受して安さを取るか、手軽さのために3倍ほどの価格差を受け入れて日本製にするか…。難しいところです。



現在のページを共有する



現在のページに関連する記事

中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 GOM Playerでコーデックが原因で動画が再生できない場合の対処法
中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 WordPressのテンプレートタグを使ってコメントフォームをカスタマイズする方法
中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 コピペから脱出!iptablesの仕組みを理解して環境に合わせた設定をしよう
中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 iptablesをシェルスクリプトで設定していて動作が遅い場合の対処法
中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 メールサーバが「451 Local Error」を返した際の対処法
中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 GMO VPSを契約してWordPressを安定動作させるまでのサーバ設定方法
中華製の監視カメラが生成する謎のh264形式動画を一般のプレイヤーで再生する方法 yumコマンドで外部リポジトリを指定して、最新のPHPにバージョンアップ

おすすめの記事

今さら聞けない、変数や関数の命名規則と、まず覚えるべき英単語200

今さら聞けない、変数や関数の命名規則と、まず覚えるべき英単…

W3 Total Cacheの設定を通して学ぶ、WordPressを高速化するキャッシュの仕組み

W3 Total Cacheの設定を通して学ぶ、WordPressを高速化するキャ…

ユーザーの環境変数を設定するbashの設定ファイルと、カスタムプロンプトについて

ユーザーの環境変数を設定するbashの設定ファイルと、カスタム…

Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する方法

Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する…

WordPressで手軽にAdblock対策するならBetter Stop AdBlockで決まり!

WordPressで手軽にAdblock対策するならBetter Stop AdBlockで決…

サーバで管理していたWordPressをローカル環境に移行する方法

サーバで管理していたWordPressをローカル環境に移行する方法

Adblock対策プラグイン「End of Adblock Cycle」を作成しました

Adblock対策プラグイン「End of Adblock Cycle」を作成しました

使うであろう文字だけの、HTML・XHTMLエンティティシート

使うであろう文字だけの、HTML・XHTMLエンティティシート


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。