2017-07-03 81 views
0

是否有任何最佳做法將轉碼輸出文件的大小保持在特定大小以下?Fluent-ffmpeg如何在不丟失任何聲音的情況下減小輸出文件的大小

我需要保持它在< 100 MB,但不知何故我最終輸出文件很大。 問題是,我的(測試)視頻文件是600kb,而生成output.wav 4MB。這與我的預期相去甚遠。

var proc = new ffmpeg({ 
     source: file, 
     nolog: false 
    }); 
    proc.addInputOption('-acodec libopus'); 

    format = "wav"; 

    proc.addOptions([ 
     '-f ' + format, 
     '-ab 192000', 
     '-ar 16000', 
     '-vn' 
    ]); 

這是我給ffmpeg庫的參數。 我應該改變什麼參數來減小尺寸並保持最大。質量?

+1

你爲什麼要輸出到WAV文件?這將使用原始PCM音頻,這是未壓縮的,這就是爲什麼你會得到如此大的輸出文件。如果你不想重新編碼(即不會失去質量),你難道不能直接複製音頻流並將其寫入單獨的'.opus'文件嗎? – slhck

+1

此外,我真的建議你嘗試先在命令行嘗試這些命令 - 然後明確ffmpeg在做什麼,它選擇哪個編解碼器,實際比特率是什麼等等。只有當你確定正確的命令是什麼,把它翻譯成fluent-ffmpeg。你會得到更好的幫助,詢問ffmpeg命令行問題,而不是一些執行它的庫。 (顯然,除非問題與庫本身有關。) – slhck

+0

@slchk,我僅限於具有特定的擴展名; flac,wav,audio/webm audio/webm; codecs = opus,audio/webm; codecs = vorbis。 我嘗試了其他輸出格式,但結果很大,與wav文件一樣多。 ffmpeg -acodec libopus -i 2.webm -vn output1x.flac我還應該指定什麼來結束一個小文件? – shamaleyte

回答

1

使用WAV作爲輸出格式使ffmpeg選擇未壓縮的PCM音頻,其中比特率設置沒有效果。您可能需要閱讀這篇文章:What is a Codec (e.g. DivX?), and how does it differ from a File Format (e.g. MPG)?

如果你使用命令行,你只需要音頻流複製到輸出文件不接觸比特流(-c:a copy):

ffmpeg -i input.webm -vn -c:a copy output.opus 

在流暢-ffmpeg的,我想這是要走的路:通過寫output.webm

ffmpeg('input.webm') 
    .addInputOption('-acodec libopus') 
    .noVideo() 
    .audioCodec('copy') 
    .output('output.opus') 

您還可以webm輸出格式。

+0

就是這樣!感謝您的時間@slchk! – shamaleyte

+0

@slchk,再次感謝您的回覆。但是當我播放時,生成的opus文件總是從第4秒或第5秒開始。看起來像是第一秒丟失了。任何想法爲什麼會發生? 請檢查我爲這個問題創建的這個新問題。 https://stackoverflow.com/questions/45063388/transcode-to-opus-by-fluent-ffmpeg-or-ffmpeg-from-command-line – shamaleyte

相關問題