我开始更加认真地对待视频。我正在完全更新的 Linux 中使用
ffmpeg
将我的视频处理为 mp4,以便直接在 HTML5 中使用它。
现在,我有旧的 AVI 视频,我想使用 ffmpeg 将其转换为 mp4,以便与 HTML5 一起使用。特别是,我有这个:
(我知道,质量很差......抱歉)。根据
ffprobe
:
Duration: 00:01:35.30, start: 0.000000, bitrate: 1284 kb/s
Stream #0:0: Video: mpeg4 (Simple Profile) (DX50 / 0x30355844), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 1144 kb/s, 30 fps, 30 tbr, 30 tbn, 30 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 kb/s
这看起来很完美:mpeg4 视频和 mp3 音频。所以我尝试了:
ffmpeg -i input.avi -acodec copy -vcodec copy output.mp4
它生成的文件在
mplayer
中可以很好地播放,但在 firefox
中则不能播放并出现错误:
Video format or MIME type not supported.
Chrome 播放音频,但不显示视频...现在,如果我这样做:
ffmpeg -i input.avi output.mp4
firefox 可以工作,但视频会以另一种尺寸(一半的比特率)重新编码。这是
ffprobe
关于重新编码的视频的说法:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100
Duration: 00:01:35.30, start: 0.000000, bitrate: 685 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 548 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
我想我失去了很多质量(以及处理视频的时间)。所以,我的问题是:
为什么浏览器无法使用
copy
编解码器播放我的视频?
我可以在这个特定文件中使用
ffmpeg
而无需重新编码吗?如果是的话,怎么办?
如果我需要重新编码,哪些是“合理”参数以保持接近原始质量?会喜欢吗
ffmpeg -i 输入.avi -b:v 1024k -bufsize 1024k 输出.mp4
这个视频够了吗?这会生成一个尺寸更接近原始视频的新视频。
谢谢!
根据 ffprobe,如果我没看错的话,您有一个 DivX (5) 视频文件。不要将其用于网络!! ;)
mpeg4 (Simple Profile) (DX50 / 0x30355844)
所以我看不出有任何机会在不重新编码的情况下使用该视频。如果您想要广泛的浏览器支持,则不需要。
使用VP9/WebM或h264:https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
产生良好重新编码的设置取决于您的输入(质量、分辨率、fps、内容类型...),因此没有标准答案。
但是你必须指定一个编解码器,或者让 ffmpeg 根据你的输出文件扩展名选择一个编解码器(只有当你对哪些扩展名获得哪些编解码器有很好的直觉时才应该这样做)。
你可以试试这个:
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mp4
libx264 通常对 h264 编码有不错的默认设置,但是如果您想对其进行微观管理,则有大量设置:https://trac.ffmpeg.org/wiki/Encode/H.264
VP9 可能会产生比 h264 更好的比特率质量,但其编码器默认速度要慢得多。
ffmpeg -i input.avi -c:v libvpx-vp9 -speed 5 -row-mt 1 -crf 30 output.webm