使用FFmpeg将AVI转换为MP4

6

我想使用HTML5视频代码在浏览器中播放avi视频格式文件。由于avi格式文件无法在浏览器中播放,因此我必须将其转换为mp4格式文件。

为了进行转换,我正在使用Windows中的ffmpeg代码。

ffmpeg -i input.avi OUTPUT.mp4

视频转换已完成,但视频编解码器和音频编解码器无效,因此无法使用html5中的视频标签进行播放。

请提供正确的代码以转换文件。我尝试过另一个转换代码,即ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a libfaac -b:a 128k OUTPUTAVINew.mp4,但我收到了“libfaac未知编码器”的错误消息,请帮帮我,我甚至下载了**libfaac.dll**,但没有用。


1
找到一个可以正常播放的视频,然后使用相同的编解码器对你的视频进行编码,非常简单。要获取信息,请使用以下命令 ffmpeg -i mymovie.avi,其中 mymovie.avi 被替换为你的视频名称。 - enhzflep
4个回答

13

虽然这篇文章有些旧了,但是在搜索中排名靠前,所以...

ffmpeg应该可以很容易地将avi转换为mp4,无需重新编码。(不要指定新的编解码器!)

ffmpeg -i input.avi -c:v copy -c:a copy OUTPUT.mp4

还应该提到,批量转换在每次使用FFmpeg进行调用时,如果脚本包含静态数据并将其放置在新行中(而不是使用变量动态生成每个调用),则会更加可靠。


1
这对我不起作用,我得到了这个错误:[mp4 @ 0x5556f084afc0] 在流 #0 中找不到编解码器 v210 的标签,目前容器不支持该编解码器 - Raleigh L.
@RaleighL。该错误似乎是由avi文件中的异常引起的(但现在没有时间查看“v210”以进行验证)。如果avi文件有效,可能需要先转换为另一种格式,然后再转换为mp4(如果需要)。 - u2n

2

将代码转换为avi格式再转换为mp4格式。FFmpeg提供了最好的解决方案。

ffmpeg -i input.avi -strict -2 output.mp4

2
提问者已经尝试过这个方法(除了正确省略不必要的“-strict -2”)。你的回答有什么不同吗? - llogan

1
我建议您使用最新版本的ffmpeg。您无需下载额外的dll文件。

请使用libvo_aacenc代替libfaac

-crf 22是高质量,请使用较低质量,例如-crf 19

根据我的经验,我会使用

ffmpeg -i input.avi -c:v libx264 -preset slow -crf 19 -c:a libvo_aacenc -b:a 128k

-1
例如,有一个视频文件139MB input.avi。
ffprobe input.avi
Input #0, avi, from 'input.avi':
  Metadata:
    encoder         : Lavf51.12.1
  Duration: 00:21:20.16, start: 0.000000, bitrate: 891 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile) (xvid / 0x64697678), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 769 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 32000 Hz, stereo, fltp, 112 kb/s

对于几乎无损的重新容器化,请使用:

ffmpeg -i "input.avi" -c:v copy -c:a copy "input.mp4"

其中 -c:v copy 表示复制视频,-c:a copy 表示复制音频。

转换大约需要 2 秒钟,结果为 input.mp4 文件大小为 138MB。速度快,几乎与原始文件相同的质量。最佳实践是让音频以原始格式保留。

ffprobe input.mp4
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf58.29.100
  Duration: 00:21:20.16, start: 0.000000, bitrate: 884 kb/s
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 769 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 32000 Hz, stereo, fltp, 112 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

如果你有时间,并且想要重新编码几乎相同质量,但是大小只有原来的1/3,请使用这个:

ffmpeg -i "input.avi" -c:a copy -c:v vp9 -b:v 100K "input.vp9.mp4"

其中-c:a copy表示复制音频,-c:v vp9 -b:v 100K表示使用100K比特率重新编码视频。138MB的重新编码大约需要40分钟,新文件大小为41MB,质量与原始文件几乎相同,但有些像素化。

ffprobe input.vp9.mp4
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf58.29.100
  Duration: 00:21:20.16, start: 0.000000, bitrate: 261 kb/s
    Stream #0:0(und): Video: vp9 (Profile 0) (vp09 / 0x39307076), yuv420p(tv, progressive), 640x480, 146 kb/s, SAR 1:1 DAR 4:3, 25 fps, 25 tbr, 12800 tbn, 12800 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 32000 Hz, stereo, fltp, 112 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接