使用 ffmpeg 将视频转换为 MP4 (H.264/AAC)

Posted

技术标签:

【中文标题】使用 ffmpeg 将视频转换为 MP4 (H.264/AAC)【英文标题】:Convert a video to MP4 (H.264/AAC) with ffmpeg 【发布时间】:2010-12-22 19:53:17 【问题描述】:

如果我没记错的话,Safari 目前需要为 html5 <video> 元素编码的 MP4 (H.264/AAC) 视频。

所以我尝试使用ffmpeg 将视频转换为这种格式。但是当我输入shell命令ffmpeg -i video.flv video.mp4时,返回的错误是:

似乎流 0 编解码器帧速率 与容器帧速率不同: 2000.00 (2000/1) -> 29.92 (359/12) 输入 #0,flv,来自“video.flv”: 持续时间:00:05:01.20,开始: 0.000000,比特率:66 kb/s 流 #0.0:视频:h264、yuv420p、320x240 [PAR 1:1 DAR 4:3]、66 kb/s、 29.92 tbr,1k tbn,2k tbc 流 #0.1:音频:aac,22050 Hz,立体声,s16 输出 #0,mp4,到 '视频.mp4': 流 #0.0:视频:mpeg4、yuv420p、320x240 [PAR 1:1 DAR 4:3]、 q=2-31, 200 kb/s, 90k tbn, 29.92 tbc 流 #0.1:音频:0x0000、22050 Hz、立体声、s16、64 kb/s 流 映射:流 #0.0 -> #0.0 流 #0.1 -> #0.1 不支持的编解码器 对于输出流#0.1

需要 AAC 编解码器,但我是 ubuntu 的新手,我现在真的不知道如何解决这个问题。我正在使用 Ubuntu 9.10 Karmik Koala(适用于 amd64)。

非常感谢。 :)

【问题讨论】:

我认为这个链接可能有用:ubuntuforums.org/showthread.php?t=786095 您的视频已经使用 H.264/AAC 编码,您只需将其复制到新容器中:ffmpeg -i video.flv -codec copy video.mp4 【参考方案1】:

您需要使用 AAC 编码器编译 ffmpeg。你可以在AudioCoding找到一个。

【讨论】:

我已经按照安装文件中的说明安装了 FAAC 1.28,但我总是遇到与上述相同的错误。 :( 您还需要在./configure 期间使用--enable libfaac 重新编译ffmpeg。参考ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide【参考方案2】:

您也可以尝试将Motumedia PPA 添加到您的 apt 源并更新您的 ffmpeg 包。

【讨论】:

【参考方案3】:

软件专利导致 Debian/Ubuntu 禁用 ffmpeg 中的 H.264 和 AAC 编码器。请参阅 /usr/share/doc/ffmpeg/README.Debian.gz。

那就去安装 x264、mplayer/mencoder 和 Nero 的 AAC 编码器吧。 (或者,如果您想使用所有免费软件,并且不太关心音频质量,那么 sudo aptitude install faac。)

我不记得 mencoder 的 medibuntu 包是否包含 x264 vid 编码,因为我是从 git x264 和 svn mplayer 源构建自己的。 (x264 的开发非常活跃,经常添加显着的质量和速度改进。) http://git.videolan.org/?p=x264.git;a=summary

x264 也已打包,但您应该检查它是否是最新的,以包含 weightp 和 recent bugfixes,以及最近的速度改进...

或者,如果您已经愿意从 .flv 转换,而不是从制作 flv 的高质量来源转换,那么您可以找到任何最新版本的 x264 都可以。

【讨论】:

优秀的 Ubuntu 安装指南ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide【参考方案4】:

http://handbrake.fr 是一个不错的高级工具,具有许多有用的 mp4 预设,适用于 iPod、PS3 等,具有适用于 Linux、Windows 和 Mac OS X 的 GUI 和 CLI 界面。

它作为单个静态链接的胖二进制文件带有自己的依赖项,因此您拥有所有 x264 / aac 编解码器。

  $ HandBrakeCLI -Z Universal -i myinputfile.mov -o myoutputfile.mp4

列出所有可用的预设:

  $ HandBrakeCLI -z

【讨论】:

【参考方案5】:

您需要recompile ffmpeg (from source) so that it supports x264。如果您按照此页面中的说明进行操作,那么您将能够执行您想要的任何类型的转换。

【讨论】:

【参考方案6】:

最近在将讨厌的 WMV 转换为 Final Cut Pro X 进行编辑时遇到了这个问题。流播放器可以做到,但它会留下水印,所以我在 ffmpeg 上摆弄了一下,直到我有事情发生。

首先安装 ffmpeg - 我用过 brew install ffmpeg 显然你需要先安装 brew,google 一下。

接下来我写了一个简单的命令行脚本,内容如下——你可以用 $1 代替输入/输出文件,或者只是创建一个 shell 脚本文件... vi 转换.sh 粘贴。

echo "Pass one" ffmpeg -y -i "$1" -c:v libx264 -preset medium -b:v 1555k -pass 1 -c:a libfaac -b:a 256k -f mp4 /dev/null && echo "Pass two" ffmpeg -i "$1" -c:v libx264 -preset medium -b:v 1555k -pass 2 -c:a libfaac -b:a 256k "$1.mp4"

然后转换您的视频... sh convert.sh myvideofile.wmv 如果一切顺利,您应该会看到一个名为 myvideofile.wmv.mp4 的新文件。

希望对你有用。

【讨论】:

【参考方案7】:

您正在尝试转换(相当罕见的).flv 文件,该文件(已经)包含 H.264 视频和 AAC 音频。

将控制台的输出格式化为 FFmpeg 会显示这些详细信息。

 Input #0, flv, from 'video.flv':
   Duration: 00:05:01.20, start: 0.000000, bitrate: 66 kb/s
    Stream #0.0: Video: h264, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 66 kb/s, 29.92 tbr, 1k tbn, 2k tbc 
    Stream #0.1: Audio: aac, 22050 Hz, stereo, s16

原始 flv 被转换为带有 H.264 视频和 AAC 音频的 .mp4 文件(就像原始 .flv 一样):

Output #0, mp4, to 'video.mp4': 
    Stream #0.0: Video: mpeg4, yuv420p, 320x240 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 29.92 tbc 
    Stream #0.1: Audio: 0x0000, 22050 Hz, stereo, s16, 64 kb/s

由于 .flv 中的音频和视频数据已经采用 .mp4 所需的格式/编解码器,因此您只需将所有内容复制到新的 .mp4 容器中即可。 此过程将比对所有内容进行解码和重新编码要快得多:

ffmpeg -i video.flv -vcodec copy -acodec copy video.mp4

或更简单地说:

ffmpeg -i video.flv -codec copy video.mp4

你得到的真正错误是:

输出流 #0.1 的编解码器不受支持

这意味着 FFmpeg 无法将音频(流 #0.1)转换为 AAC。

您可以通过以下方式跳过错误:

复制音频数据,因为它已经 AAC 编码(使用上面的复制命令)

或者您可以通过以下方式解决错误:

使用支持 AAC 解码/编码的 FFmpeg 构建。 FFmpeg 目前支持 4 个 AAC 库(请参阅 FFmpeg and AAC Encoding Guide)。

更多细节你也应该阅读Converting FLV to MP4 With FFmpeg The Ultimate Guide

【讨论】:

【参考方案8】:

试试这个:: Libav in Linux

Installation: run command  
               sudo apt-get install libav-tools 

Video conversion command::Go to folder contains the video and run in terminal
               avconv -i oldvideo.flv -ar 22050 convertedvideo.mp4

【讨论】:

这个非常老的问题有ubuntu标签,但是Ubuntu 14.04是目前唯一一个仍然提供libav-tools包的Ubuntu版本(不包括稍后提供的同名过渡包)版本)。 Ubuntu 然后在以后的版本中回到 FFmpeg 而不是 Libav,它应该能够毫无问题地将 flv 转换为 mp4。

以上是关于使用 ffmpeg 将视频转换为 MP4 (H.264/AAC)的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 没有将一些 mov 视频转换为 mp4

使用 ffmpeg 将 mkv 转换为 mp4 有时会丢失视频

将任何类型的视频转换为MP4 php而不用ffmpeg [关闭]

asp.net 使用FFmpeg将视频转换为mp4格式

当我将视频转换为 mp4 时,PHP FFMPEG 不起作用 [关闭]

使用 ffmpeg 将 Mp4 转换为 HLS