2016-10-27 93 views
1

我正在使用MediaRecorder錄製音頻(oga/vorbis)文件。當我通過Chrome記錄這些文件時,我遇到了一些問題:我無法編輯ffmpeg上的文件,當我嘗試在Firefox上播放它們時,它說它們已損壞(儘管它們在Chrome上運行良好)。在Chrome上缺少持續時間的MediaRecorder錄製的音頻

看着他們的ffmpeg的元數據,我得到這個:

Input #0, matroska,webm, from '91.oga': 
    Metadata: 
    encoder   : Chrome 
    Duration: N/A, start: 0.000000, bitrate: N/A 
    Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default) 
[STREAM] 
index=0 
codec_name=opus 
codec_long_name=Opus (Opus Interactive Audio Codec) 
profile=unknown 
codec_type=audio 
codec_time_base=1/48000 
codec_tag_string=[0][0][0][0] 
codec_tag=0x0000 
sample_fmt=fltp 
sample_rate=48000 
channels=1 
channel_layout=mono 
bits_per_sample=0 
id=N/A 
r_frame_rate=0/0 
avg_frame_rate=0/0 
time_base=1/1000 
start_pts=0 
start_time=0.000000 
duration_ts=N/A 
duration=N/A 
bit_rate=N/A 
max_bit_rate=N/A 
bits_per_raw_sample=N/A 
nb_frames=N/A 
nb_read_frames=N/A 
nb_read_packets=N/A 
DISPOSITION:default=1 
DISPOSITION:dub=0 
DISPOSITION:original=0 
DISPOSITION:comment=0 
DISPOSITION:lyrics=0 
DISPOSITION:karaoke=0 
DISPOSITION:forced=0 
DISPOSITION:hearing_impaired=0 
DISPOSITION:visual_impaired=0 
DISPOSITION:clean_effects=0 
DISPOSITION:attached_pic=0 
TAG:language=eng 
[/STREAM] 
[FORMAT] 
filename=91.oga 
nb_streams=1 
nb_programs=0 
format_name=matroska,webm 
format_long_name=Matroska/WebM 
start_time=0.000000 
duration=N/A 
size=7195 
bit_rate=N/A 
probe_score=100 
TAG:encoder=Chrome 

正如你可以看到有與持續時間的問題。我看過的帖子是這樣的: How can I add predefined length to audio recorded from MediaRecorder in Chrome?

但即使是嘗試,試圖運行時砍和合並files.For例如,當我得到的錯誤:

ffmpeg -f concat -i 89_inputs.txt -c copy final.oga 

我得到了很多這樣的:

[oga @ 00000000006789c0] Non-monotonous DTS in output stream 0:0; previous: 57612, current: 1980; changing to 57613. This may result in incorrect timestamps in the output file. 
[oga @ 00000000006789c0] Non-monotonous DTS in output stream 0:0; previous: 57613, current: 2041; changing to 57614. This may result in incorrect timestamps in the output file. 
DTS -442721849179034176, next:42521 st:0 invalid dropping 
PTS -442721849179034176, next:42521 invalid dropping st:0 
[oga @ 00000000006789c0] Non-monotonous DTS in output stream 0:0; previous: 57614, current: 2041; changing to 57615. This may result in incorrect timestamps in the output file. 
[oga @ 00000000006789c0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly 
DTS -442721849179031296, next:42521 st:0 invalid dropping 
PTS -442721849179031296, next:42521 invalid dropping st:0 

有誰知道我們需要做什麼從Chrome錄製的音頻文件,他們是有用的?或者我的設置有問題嗎?

記錄JS:

if (navigator.getUserMedia) { 
    console.log('getUserMedia supported.'); 

    var constraints = { audio: true }; 
    var chunks = []; 

    var onSuccess = function(stream) { 
    var mediaRecorder = new MediaRecorder(stream); 

    record.onclick = function() { 
     mediaRecorder.start(); 
     console.log(mediaRecorder.state); 
     console.log("recorder started"); 
     record.style.background = "red"; 

     stop.disabled = false; 
     record.disabled = true; 

     var aud = document.getElementById("audioClip"); 
     start = aud.currentTime; 
    } 

    stop.onclick = function() { 
     console.log(mediaRecorder.state); 
     console.log("Recording request sent."); 
     mediaRecorder.stop(); 
    } 

    mediaRecorder.onstop = function(e) { 
     console.log("data available after MediaRecorder.stop() called."); 

     var audio = document.createElement('audio'); 
     audio.setAttribute('controls', ''); 
     audio.setAttribute('id', 'audioClip'); 

     audio.controls = true; 
     var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs="vorbis"' }); 
     chunks = []; 
     var audioURL = window.URL.createObjectURL(blob); 
     audio.src = audioURL; 

     sendRecToPost(blob); // this just send the audio blob to the server by post 
     console.log("recorder stopped"); 

    } 
+0

對於那些你已經找到相同的,煩人的獨特的問題,我提醒這與Chrome的錯誤,他們已經欺騙我的錯誤到這一個:https://bugs.chromium.org/p/chromium/issues/detail?id = 642012 - 我假設他們會在這裏說,如果他們已經解決了,但沒有然而。我基本上只是去了「讓我們只使用Firefox」,稍後再看看替代方案。我原來的錯誤是:https://bugs.chromium.org/p/chromium/issues/detail?id = 658149#c3 – suppp111

回答

0

我發現在ffmpeg documentation,我們可以使用此選項在轉換設置的元數據:

//-metadata[:metadata_specifier] key=value (output,per-metadata) 
//Set a metadata key/value pair. 

ffmpeg -i in.avi -metadata title="my title" out.flv 

您也可以測試持續時間轉換限制適用於您的案例:

//-t duration (input/output) 
//When used as an input option (before -i), limit the duration of data read from the input file. 

//When used as an output option (before an output url), stop writing the output after its duration reaches duration. 
相關問題