如何使用 ffmpeg 将视频处理为 mp4 以获得质量和兼容性?
How to process a video to mp4 with ffmpeg for quality and compatibility?
我开始认真对待视频了。我正在使用完全更新的 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 input.avi -b:v 1024k -bufsize 1024k 输出.mp4
这个视频够不够?这将生成一个新视频,其大小更接近原始视频。
谢谢!
根据 ffprobe 的说法,如果我没看错的话,你有一个 DivX (5) 视频文件。请勿用于网络!! ;)
mpeg4 (Simple Profile) (DX50 / 0x30355844)
所以我看不出有任何机会在不重新编码的情况下使用这个视频。如果您希望支持 firefox,则不会。
使用WebM或h264:https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
更新
重新编码的良好设置取决于您的输入(比特率、分辨率、fps、某种 material ...),因此没有标准答案。
但是你必须指定一个编解码器或 ffmpeg 根据你的输出文件扩展名选择一个(所以它可能是错误的)。
你可以试试这个:
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv
预设和曲调有助于找到最佳选择:https://trac.ffmpeg.org/wiki/Encode/H.264
我开始认真对待视频了。我正在使用完全更新的 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 input.avi -b:v 1024k -bufsize 1024k 输出.mp4
这个视频够不够?这将生成一个新视频,其大小更接近原始视频。
谢谢!
根据 ffprobe 的说法,如果我没看错的话,你有一个 DivX (5) 视频文件。请勿用于网络!! ;)
mpeg4 (Simple Profile) (DX50 / 0x30355844)
所以我看不出有任何机会在不重新编码的情况下使用这个视频。如果您希望支持 firefox,则不会。
使用WebM或h264:https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
更新
重新编码的良好设置取决于您的输入(比特率、分辨率、fps、某种 material ...),因此没有标准答案。
但是你必须指定一个编解码器或 ffmpeg 根据你的输出文件扩展名选择一个(所以它可能是错误的)。
你可以试试这个:
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv
预设和曲调有助于找到最佳选择:https://trac.ffmpeg.org/wiki/Encode/H.264