我正在使用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执行此命令。请你帮我解决如何将这个30Mb的文件大小减小(几乎上传的文件大小没问题)。
答案 0 :(得分: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");
我通过搜索很多来创建这个命令,这符合我的要求,使用它可以减少文件大小,但质量相同。
希望这也适合你。
答案 1 :(得分:0)
您应该尝试使用关键帧速率(-g)。关键帧之间的帧仅具有与前一关键帧不同的像素。如果您的关键帧相距太远,则所有像素都存在于中间帧(增大的大小)中,过于接近,关键帧的数量会增加文件大小。
请注意,每个视频的最佳关键帧速率会有所不同,因此您需要找到一个中间地带。
答案 2 :(得分: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
。但请记住,降低比特率时质量也会降低。如果质量太差,您还可以降低帧速率或帧大小以提高质量。