ffmpeg将mov文件转换为mp4,用于HTML5视频标签IE9

时间:2013-03-20 13:21:39

标签: video ffmpeg internet-explorer-9 html5-video codec

我在这里和谷歌到处都是 - 没有适用于IE9的有效命令。 一些IE9如何丢失的东西。 我试过的所有功能都在其他地方工作:chrome,safari,移动设备等...... 我想要一个可以转换它的命令,我可以在每个设备中使用它,假设支持HTML5视频标签中的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文件,适用于chrome,safari等...甚至当我使用窗口媒体播放器在Windows中启动它们时也能工作。 当我把这个文件放在IE9中的视频标签(我使用的是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>

如果我使用软件miro video converter将同一个mov文件转换为mp4 - 它转换得很好,我可以在IE9中播放它! miro转换器也在其中使用embedd ffmpeg,所以我确信它只是一个正确的ffmpeg命令和参数的metter。 在我的apache htaccess中,我为我的文件设置了正确的mime类型,我看到它在查看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

我很长时间都在努力,所以任何帮助都会受到高度赞赏。

谢谢!

6 个答案:

答案 0 :(得分:91)

ffmpeg

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

您还可以添加-q:v / -q:a参数来指定视频的质量。您也可以使用HandBrake,这是一个比ffmpeg更简单的编码器。

HandBrake

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

编辑:我找到了解决方案!这是一个带有工作演示的ZIP,我在IE 9和Firefox上测试过!

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

此外,上面的演示有一个闪回后退,所以它应该适用于IE8及更少。

使用了相同的ffmpeg命令 编辑:我不得不重新上传视频,因为我的托管服务暂时停止。现在它托管在mediafire上。我发现它们是最好的文件共享服务。最低广告,无需注册,无需等待30秒。

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

非常重要!请务必点击“允许有效内容”按钮,以便在本地运行时允许该视频!

我遇到的问题和解决方案的视频:请参阅上面提到的演示。

测试时使用的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提供的工作测试视频(适用于IE),我发现他们使用HandBrake对视频进行编码。

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`

答案 1 :(得分:11)

ffmpeg的主要旅程


  

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

按照说明在Windows中安装Ffmpeg二进制文件


  

<强>说明:

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

    可选的libx264预设设置:

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

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

      1. 复制环境变量文件夹
      2. 下的预设
      3. 您需要使用以下命令转换为ffmpeg:
      4. 对于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"
        

答案 2 :(得分:4)

来自orig链接...

ffmpeg 0.6及更高版本完全支持WebM。在命令行上,运行不带参数的ffmpeg并验证它是否使用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版本的完整路径。)< / p>

我打算进行两遍编码。传递1只扫描输入视频文件(-i pr6.dv)并将一些统计信息写入日志文件(将自动命名为pr6.dv-0.log)。我使用-vcodec参数指定视频编解码器:

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的选项,但我还不知道它们是如何工作的。一旦我找到了对它们的一个很好的解释,我会在这里将它链接起来并将它们纳入叙述中,如果它值得的话。

对于第二次传递,ffmpeg将读取它在第一次传递期间写入的统计信息,并实际执行视频和音频的编码。它会写出一个.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指定我们使用。编码 VP8视频编解码器。 WebM始终使用VP8视频。
  • -b 614400指定比特率。与其他格式不同, libvpx期望实际比特的比特率,而不是千比特。如果你想 一个600 kbps的视频,乘以600×1024得到614400。
  • -s 320x240指定目标尺寸,按高度宽度。
  • -aspect 4:3指定视频的宽高比。 标清视频通常为4:3,但大多数是高清视频 视频是16:9或16:10。在我的测试中,我发现我必须指定 这显然在命令行上,而不是依赖于ffmpeg 自动检测它。
  • -acodec libvorbis指定我们使用。编码 Vorbis音频编解码器。 WebM始终使用Vorbis音频。

答案 3 :(得分:1)

我花了很多时间试图找出那个。我终于找到了如何使用avconv(或ffmpeg)正确地做到这一点

  1. 使用H.264编解码器将视频转换为MPEG4。你不需要任何花哨的东西,只需让avconv为你完成这项工作:

    avconv -i video.mp4 -vcodec libx264 pre_out.mp4
    
  2. 将文件信息移动到文件头,这样浏览器就可以在开始下载后立即开始播放。这是IE9的关键!!!

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

答案 4 :(得分:1)

我的问题是像素格式化。

添加-pix_fmt yuv420p为我修复了IE。

答案 5 :(得分:0)

前一段时间遇到同样的问题,我成功解决了这个问题:

首先,如果您想进行一些实验,请下载最新版本的ffmpeg(或从官方github存储库(https://github.com/FFmpeg/FFmpeg)构建)。

然后试试这个:

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

希望这会有所帮助!