ffmpeg将mov文件转换为用于HTML5video标签IE9的mp4

我在这里和谷歌无处不在 – 没有有效的命令适用于IE9。 一些如何IE9是缺less的东西。 所有我尝试在其他地方工作:铬,Safari,移动设备等…我想要一个命令,将其转换,我可以在每个设备中使用它假设支持HTML5video标签MP4。

我使用这个命令:

ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4 ffmpeg -i movie.mov -vcodec libx264 -vprofile high -preset slow -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=-1:480 -threads 0 -acodec libvo_aacenc -b:a 128k -pix_fmt yuv420p outa.mp4 ffmpeg -i movie.mov -b:V 1500k -vcodec libx264 -preset fast -g 30 adel.mp4 ffmpeg -i movie.mov -acodec aac -strict experimental -ac 2 -ab 160k -vcodec libx264 -preset slow -f mp4 -crf 22 lamlam.mp4 ffmpeg -i movie.mov -acodec aac -strict experimental -ac 2 -ab 160k -vcodec libx264 -preset slow -profile:v baseline -level 30 -maxrate 10000000 -bufsize 10000000 -f mp4 -threads 0 adiel.mp4 

等等..再次所有这些命令产生一个有效的MP4文件,在铬,Safari浏览器等工作,即使我使用窗口媒体播放器在Windows本身启动他们的作品。 当我把这个文件放在IE9中的video标签(我正在使用http://videojs.com/ )时,它不起作用!

 <div class="vidoco-content" style="margin-top: 20px;"> <video id="divVid" class="video-js vjs-default-skin vidoco-center" controls preload="none" width="600" height="400" poster="<?php echo(DOMAIN); ?>static/test.jpg"> <source src="<?php echo(DOMAIN); ?>static/out.mp4" type="video/mp4" /> </video> 

如果我使用软件mirovideo转换器将相同的mov文件转换为mp4 – 它转换得很好,我可以在IE9中播放它! miro转换器也使用embeddedffmpeg里面,所以我相信它只是一个正确的ffmpeg命令和参数metter。 在我的apache htaccess中,我为我的文件设置了正确的mimetypes,并且在IE开发人员工具中查看时确实是正确的:

 AddType audio/aac .aac AddType audio/mp4 .mp4 .m4a AddType audio/mpeg .mp1 .mp2 .mp3 .mpg .mpeg AddType audio/ogg .oga .ogg AddType audio/wav .wav AddType audio/webm .webm AddType video/mp4 .mp4 .m4v AddType video/ogg .ogv AddType video/webm .webm 

我很长时间以来一直在努力,所以任何帮助将不胜感激。

谢谢!

对于ffmpeg

 ffmpeg -i {input}.mov -vcodec h264 -acodec aac -strict -2 {output}.mp4 

您还可以添加-q:v / -q:a参数来指定video的质量。 你也可以使用比ffmpeg更简单的编码器HandBrake。

对于HandBrake

 handbrakecli -i {input}.mov -e x264 -E facc -o {output}.mp4 

编辑:我find了解决scheme! 这是一个带有我在IE 9和Firefox上testing的工作演示的ZIP!

http://www.mediafire.com/download/kyavlpudybg0bc1/HTML5_video.zip

另外,上面的演示有一个闪回后备,所以它应该在IE8和更less的工作。

使用相同的ffmpeg命令。
编辑:我不得不重新上传video,因为我的托pipe服务暂时停止。 现在它在mediafire上托pipe。 我发现他们是最好的文件共享服务。 最小的广告,没有注册,没有30秒等待。

此外,请查看videojs网站上的这个讨论: http ://help.videojs.com/discussions/problems/1020-ffmpeg-command-produce-your-demonstration-video

很重要! 确保点击“允许活动内容”button,允许video在本地运行!

我有问题的video和我的解决scheme:请参阅我上面提到的演示。

testing时使用的HTML代码:

 <!DOCTYPE html> <html> <body> <video width="320" height="240" controls> <source src="movie.mp4" type="video/mp4"> <source src="movie.ogg" type="video/ogg"> Your browser does not support the video tag. </video> </body> </html> 

我分析了一个w3schools提供的工作testingvideo(它在IE上工作),我发现他们使用HandBrake来编码video。

 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movie.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 creation_time : 2010-05-11 10:32:06 encoder : HandBrake 0.9.4 2009112300 Duration: 00:00:12.61, start: 0.000000, bitrate: 202 kb/s Chapter #0.0: start 0.000000, end 12.612000 Metadata: title : Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 320x240, 80 kb/s, 29.65 fps, 29.97 tbr, 90k tbn, 59.31 tbc Metadata: creation_time : 2010-05-11 10:32:06 Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 115 kb/s Metadata: creation_time : 2010-05-11 10:32:06 Stream #0:2(und): Subtitle: mov_text (text / 0x74786574) Metadata: creation_time : 2010-05-11 10:32:06` 

主要旅程ffmpeg


下载最新的ffmpeg及其预设http://www.ffmpeg.org/download.html

按照说明在Windows中安装Ffmpeg Binary


说明:

  1. 从arrozcru autobuild页面获取最新版本
  2. 将文件夹解压缩到C:/ Program Files / ffmpeg
  3. 将C:/ Program Files / ffmpeg / bin添加到系统的PATH环境variables中

可选的libx264预设设置:

如果您使用libx264预设(通过使用-vpre标志),您需要执行以下设置。

  1. 为指向您的主目录的用户创build一个HOME环境variables。 (例如Vista / 7/8 C:/ Users / moose或XP C:/ Documents and Settings / moose)
  2. 在您的主目录中创build一个.ffmpeg文件夹
  3. 将预设文件从C:/ Program Files / ffmpeg / share / * .ffpreset复制到%HOME%/。ffmpeg
  4. 现在你可以打开命令提示符并使用ffmpeg。 :D(例如,这是我的Vimeovideo转换命令ffmpeg -i input.mov -vcodec libx264 -vpre hq -crf 24 -g 25 -acodec libmp3lame -ab 192k -ar 44100 output.mp4)
    *注意:由于libfaac被认为是非自由插件,libfaac不包含在构build中

请记住在Windows中设置HOME环境variables

  1. 复制环境variables文件夹下的预设
  2. 您需要使用以下命令来使用ffmpeg进行转换:

对于MP4(H.264 / ACC):

 ffmpeg -i INPUTFILE -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 "OUTPUTFILE.mp4" 

对于webm(VP8 / Vorbis):

 ffmpeg -i "INPUTFILE" -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 "OUTPUTFILE.webm" 

ogv(Theora / Vorbis):

 ffmpeg -i "INPUTFILE" -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 "OUTPUTFILE.ogv" 

从原始链接…

WebM在ffmpeg 0.6和更高版本中得到完全支持。 在命令行上,运行不带参数的ffmpeg,并validation它是否支持VP8编译:

 you@localhost$ ffmpeg FFmpeg version SVN-r23197, Copyright (c) 2000-2010 the FFmpeg developers built on May 19 2010 22:32:20 with gcc 4.4.3 configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis --enable-libvpx 

如果您没有看到“ --enable-libvorbis ”和“ --enable-libvpx ”这些魔术字,那么您没有正确的ffmpeg版本。 (如果你自己编译了ffmpeg,检查一下你是否安装了两个版本,没关系,它们不会相互冲突,你只需要使用启用了VP8的ffmpeg版本的完整path)。

我打算做一个两遍编码。 Pass 1只是扫描inputvideo文件(-i pr6.dv),并将一些统计信息写入日志文件(将自动命名为pr6.dv-0.log)。 我使用-vcodec参数指定video编解码器:

 you@localhost$ ffmpeg -pass 1 -passlogfile pr6.dv -threads 16 -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx -b 614400 -s 320x240 -aspect 4:3 -an -y NUL 

大多数ffmpeg命令行与VP8或WebM无关。 libvpx确实支持一些可以传递给ffmpeg的特定于VP8的选项,但我还不知道它们是如何工作的。 一旦我find了一个很好的解释,我会把它链接到这里,如果值得这样做的话,将它们join叙述。

对于第二遍,ffmpeg将读取第一遍中写入的统计信息,并实际进行video和audio的编码。 它会写出一个.webm文件。

 you@localhost$ ffmpeg -pass 2 -passlogfile pr6.dv -threads 16 -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx -b 614400 -s 320x240 -aspect 4:3 -acodec libvorbis -y pr6.webm 

这里有五个重要的参数:

  • -vcodec libvpx指定我们使用VP8video编解码器进行编码。 WebM总是使用VP8video。
  • -b 614400指定比特率。 与其他格式不同,libvpx期望实际位的比特率,而不是千比特。 如果你想要一个600 kbps的video,乘以600乘1024获得614400。
  • -s 320x240指定目标大小,宽度和高度。
  • -aspect 4:3指定video的宽高比。 标准清晰度video通常是4:3,但大多数高清video是16:9或16:10。 在我的testing中,我发现我不得不在命令行上明确地指定它,而不是依靠ffmpeg来自动检测它。
  • -acodec libvorbis指定我们使用Vorbisaudio编解码器进行编码。 WebM总是使用Vorbisaudio。

我花了很多时间试图找出一个。 我终于find了如何正确使用avconv(或ffmpeg)

  1. 使用H.264编解码器将video转换为MPEG4。 你不需要任何幻想,只要让avconv为你做这个工作:

     avconv -i video.mp4 -vcodec libx264 pre_out.mp4 
  2. 将文件信息移至文件标题,以便浏览器在开始下载文件时就可以开始播放。 这是IE9的关键!

     qt-faststart pre_out.mp4 out.mp4 

qt-faststart是支持H.264 / ACC文件格式的Quicktime实用程序。 它是libav-tools包的一部分。

我的问题是像素格式。

添加-pix_fmt yuv420p在我的IE固定它。

前一阵子有同样的问题,我就这样成功解决了:

首先,下载最新版本的ffmpeg(或者从官方的github仓库( https://github.com/FFmpeg/FFmpeg )构build,如果你想做一些实验的话)。

然后试试这个:

 ffmpeg -i input.mov -c:v libx264 -c:a libfaac -strict experimental output.mp4 

希望这将有助于!