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

おすすめの記事

メールのエラーコードと、メールサーバのmaillog解析方法まとめ

メールのエラーコードと、メールサーバのmaillog解析方法まとめ

Googlebotを手懐ける!robots.txtの書き方とrobots.txtテスターの使い方

Googlebotを手懐ける!robots.txtの書き方とrobots.txtテスター…

Apacheのmod_expiresでファイルタイプごとにキャッシュをコントロールする方法

Apacheのmod_expiresでファイルタイプごとにキャッシュをコント…

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

WordPressのサイトをHTTPS化して学ぶLet’s Encryptの使い方

DELL Inspiron 3250のHDDをSSDへ換装して、メモリを16GBへ増設

DELL Inspiron 3250のHDDをSSDへ換装して、メモリを16GBへ増設

サーバの処理を自動実行するcronの仕組みと応用法

サーバの処理を自動実行するcronの仕組みと応用法

Custom Post Type UIでカスタム投稿を作って、誰でも簡単に編集できる投稿画面を作る方法

Custom Post Type UIでカスタム投稿を作って、誰でも簡単に編集…

開発の最前線でクリエイター・エンジニアに必要なプログラミング言語

開発の最前線でクリエイター・エンジニアに必要なプログラミン…


コメントを残す

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

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