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

时间:2009-12-03 13:23:08

标签: linux video ubuntu ffmpeg

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

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

  

似乎流0编解码器帧速率   与容器帧率不同:   2000.00(2000/1) - &gt; 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,to   'video.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 - &gt; #0.0
  流#0.1 - &gt; #0.1不支持的编解码器   输出流#0.1

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

非常感谢你。 :)

8 个答案:

答案 0 :(得分:16)

http://handbrake.fr是一个很好的高级工具,为iPod,PS3,...提供了许多有用的预设,包括适用于Linux,Windows和Mac OS X的GUI和CLI界面。

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

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

列出所有可用的预设:

  $ HandBrakeCLI -z

答案 1 :(得分:14)

软件专利促使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,而不是从高质量的源代码转换而来,那么很可能无论最新版本的x264都可以使用。

答案 2 :(得分:4)

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

将控制台的输出格式化为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编码(使用上面的复制命令)

或者你可以解决错误:

有关详情,请阅读Converting FLV to MP4 With FFmpeg The Ultimate Guide

答案 3 :(得分:3)

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

答案 4 :(得分:1)

您也可以尝试将Motumedia PPA添加到a​​pt资源并更新您的ffmpeg软件包。

答案 5 :(得分:1)

最近出现了这个问题,将令人讨厌的WMV转换为Final Cut Pro X进行编辑。 Flow玩家可以做到,但它留下了水印,所以我用ffmpeg摆弄了一下,直到我得到了一些东西。

首先安装ffmpeg - 我用过 brew install ffmpeg 显然你需要先安装brew,谷歌那个位。

接下来,我编写了一个简单的命令行脚本,其中包含以下内容 - 您可以将$ 1替换为输入/输出文件,或者只创建一个shell脚本文件... vi convert.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的新文件。

希望对你有用。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

  
    
      

尝试以下操作:: Linux中的 Libav

    
  
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