2011-11-24 169 views
1

我正在使用ffmpeg將視頻轉換爲mp4.Its工作正常,並且其播放質量很高。沒問題。但最糟糕的情況是我上傳了14Mb文件,轉換後轉換爲30 Mb文件。我正在使用以下腳本爲什麼轉換的視頻文件大小大於原始文件大小?

exec("ffmpeg -i videowithaudio.flv -vcodec libx264 -vpre hq -vpre ipod640 -b 250k -bt 50k -acodec libfaac -ab 56k -ac 2 -s 480x320 video_out_file.mp4 > output1.txt 2> apperror1.txt"); //webkit compatible 

我使用PHP來轉換爲執行本command.Could請你幫我如何從這個30MB減少文件大小(近於上傳的文件大小是確定)具有相同的質量。

+0

您可以在http://avp.stackexchange.com/網站上獲得關於AV問題的更專注的答案。 –

+0

我唯一可以向你保證的是,PHP在這裏完全沒有什麼可做的 –

回答

1

flv轉換爲mp4的文件將始終具有比源文件更大的文件大小。通常flv文件比其他格式小,這就是爲什麼youtube將所有文件轉換爲flv。

您可以使用-sameq參數來保留視頻質量和最終輸出文件的較小文件大小。

例1:

ffmpeg -i input.flv -sameq -ar 22050 output.mp4 

例2:

exec("/usr/bin/ffmpeg -y -i input.flv -acodec libfaac -sameq -ar 44100 -ab 96k -coder ac -me_range 16 -subq 5 -sc_threshold 40 -b 1600k -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -i_qfactor 0.71 -keyint_min 25 -b_strategy 1 -g 250 -r 20 output.mp4"); 

我通過很多搜索創造了這個命令,這符合我的要求,用這個你可以得到一個少一點文件大小,但具有相同質量。

希望這也適用於你。

+0

感謝您的信息你在這裏提供了。這是有道理的。但是你給的是使文件大小超過前一個30Mb到40MB,所以我不能拿這個。 – svk

+0

我沒有要求你使用這個命令,只是刪除你不想要的參數。 – AlphaMale

0

你應該嘗試玩關鍵幀率(-g)。關鍵幀之間的幀僅具有與先前關鍵幀不同的像素。如果您的關鍵幀距離太遠,所有像素都會出現在中間幀中(增加大小),太靠近並且關鍵幀的數量會增加文件大小。

請注意,每個視頻的最佳關鍵幀速率會有所不同,因此您需要找到中間地帶。

0
exec("ffmpeg -i videowithaudio.flv -vcodec libx264 -vpre hq -vpre ipod640 -b 250k -bt 50k -acodec libfaac -ab 56k -ac 2 -s 480x320 video_out_file.mp4 > output1.txt 2> apperror1.txt"); //webkit compatible 

對檔案大小而言很重要的是bitrate。比特率指定每秒鐘視頻使用多少個字節。如果降低比特率,文件大小也會變小。

您目前正在使用250kbit/s視頻(-b 250k)和56kbit/s音頻(-ab 56k),因此您必須減少這些數字。例如,您可以嘗試:-b 100k -ab 32k。但請記住,當您降低比特率時,質量也會降低。如果質量變得太差,您還可以降低幀率或幀大小以提高質量。

相關問題