質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

4816閲覧

【Javascript】webmではなくmp4で録画したい

syukun2

総合スコア24

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2020/06/27 13:36

編集2020/06/27 22:43

Javascriptで録画をするとWebMという形式で保存されてしまいます。webmはiPhoneなどで再生できないため使いにくいです。

ビデオをmp4で録画・保存することはできますか?
もしくは、WebMをmp4に変換する方法を紹介していただけたら助かります。

よろしくお願いします。

参考ページ:
https://qiita.com/niisan-tokyo/items/fa6ff649a9a3312148bc

コード:

Javascript

1 var video = document.getElementById('video')// 適当にvideoタグのオブジェクトを取得 2 var constrains = { video: true, audio: true }// 映像・音声を取得するかの設定 3 navigator.mediaDevices.getUserMedia(constrains) 4 .then(function(stream) { 5 video.srcObject = stream // streamはユーザーのカメラとマイクの情報で、これをvideoの入力ソースにする 6 video.play() 7 }) 8 .catch(function(err) { 9 console.log("An error occured! " + err) 10 }) 11 // まずはユーザーのカメラ・マイクへのアクセスを実施 12 navigator.mediaDevices.getUserMedia(constrains) 13 .then(function (stream) { 14 recorder = new MediaRecorder(stream) // 映像の入力ソースをユーザーのデバイスから取得 15 recorder.ondataavailable = function (e) { 16 var testvideo = document.getElementById('test') 17 testvideo.setAttribute('controls', '') 18 testvideo.setAttribute('width', width) 19 testvideo.setAttribute('height', height) 20 var outputdata = window.URL.createObjectURL(e.data) // videoタグが扱えるように、記録データを加工 21 testvideo.src = outputdata // テスト用のビデオのソースに記録データを設置 22 } 23 }) 24 25 startbutton.addEventListener('click', function(ev){ 26 recorder.start() 27 ev.preventDefault() 28 }, false); 29 30 stopbutton.addEventListener('click', function(ev) { 31 recorder.stop() 32 }) 33 34 downloadbutton.addEventListener('click', function(ev) { 35 console.log(record_data) 36 var blob = new Blob(record_data, { type: 'video/webm' })// 録画ファイルをblob形式に出力 37 var url = window.URL.createObjectURL(blob) // データにアクセスするためのURLを作成 38 var a = document.createElement('a') // download属性を持ったaタグをクリックするとダウンロードができるので、それをシミュレートする 39 document.body.appendChild(a) 40 a.style = 'display:none' 41 a.href = url; 42 a.download = 'test.webm' 43 a.click() 44 window.URL.revokeObjectURL(url) 45 })

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/06/27 13:44

「Javascriptで録画をすると」の前提条件がわかりません。 具体的な保存方法を提示ください
m.ts10806

2020/06/27 14:00

>Javascriptで録画をするとWebMという形式で保存されてしまいます 実現しているコードを提示してください。
syukun2
m.ts10806

2020/06/27 23:01

type: 'video/webm' 'test.webm' って自身で書かれてますね
syukun2

2020/06/28 00:08

StackoverFlowの回答曰く、以下の形式にしか対応していないとのことでしたので、仕方がなく「video/webm」と書いていました。 ここを「video/mp4」とすると対応していないとエラーがでます。 対応形式(https://stackoverflow.com/questions/44392027/webrtc-convert-webm-to-mp4-with-ffmpeg-js) "video/webm" "video/webm;codecs=vp8" "video/webm;codecs=vp9" "video/webm;codecs=h264" "video/x-matroska;codecs=avc1"
syukun2

2020/06/28 00:11 編集

上記のページの回答に、以下のコードを書くとmp4で保存できると書いていますが、「.mp4」保存してみたところデータがうまく再生できませんでした。 ちなみに、拡張子を.webmにすると再生できました。 【コード】 var options = {mimeType: 'video/webm;codecs=h264'}; mediaRecorder = new MediaRecorder(stream, options); ..... //Before merging blobs change output mime var blob = new Blob(recordedBlobs, {type: 'video/mp4'}); // And name your file as video.mp4
miyabi_takatsuk

2020/06/28 00:52

おそらく、現段階では、拡張子や、コーデックは対応したものにできても、 本質的な動画の形式が、mp4に落とし込めないのでしょう。 これは、ブラウザなどのテクノロジーの時点での限界なので、 無理かと思いますよ。 まぁ、強いて方法と言えば、 mp4のバイナリデータの解析と、 Blobクラスの中身解析して、 オリジナルで、mp4書き出しアルゴリズムを作成する、とかでしょうかね。 めちゃくちゃ時間かかりそうですが。 もしくは、サーバーサイドでの技術だったら、ありそうな気がするので、 API提供してるサイトなどを探す、とかですね。
syukun2

2020/06/28 00:55

miyabi_takatsukさん 無理ですか...残念です。 他のAPIなどを探してみようと思います! 回答ありがとうございます。
ikadzuchi

2020/06/28 05:21

> 以下のコードを書くとmp4で保存できる コメントにありますけどこれは「~.mp4」というファイル名のwebmファイルができるだけのようですね。 動画再生ソフトはしばしば誤った拡張子のファイルも正常に再生できてしまうのでそれで勘違いしたのではないかと思います。 (というかh.264のwebmなんてあったんですね…) コーデックがh.264にできているならコンテナをwebmからmp4に変換するのはそう難しい処理ではないと思いますが、ブラウザ上で完結するライブラリなどは見つけられませんでした。一応「javascript mp4 mux」で検索するとそれらしきものが少々見つかったりはしますが。
miyabi_takatsuk

2020/06/28 08:05

ikadzuchiさん > ですよね。 やはり、なんかのAPI探す方が現実的くさいですよね・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問