【问题标题】:ffmpeg convert any file to any fileffmpeg 将任何文件转换为任何文件
【发布时间】:2015-08-05 07:46:39
【问题描述】:

我想要简单的命令将任何支持的文件转换为几乎没有视频压缩的任何文件。

例如

avi to mp4
mp4 to 3gp
.
.etc..

我试过下面的代码

ffmpeg -i infile.flv outfile.3gp

它适用于某些人,但对于其他一些人,例如flv to 3gp 转换,它会引发如下错误,并且输出文件大小比输入文件大。

"Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height" 

P:s 我用下面的库编译

./configure --enable-version3 --enable-libopencore-amrnb --enable-libvo-aacenc --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-gpl --enable-postproc --enable-nonfree

完整回复

array(48) {
  [0]=>
  string(77) "ffmpeg version N-72286-gd9b264b Copyright (c) 2000-2015 the FFmpeg developers"
  [1]=>
  string(56) "  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-11)"
  [2]=>
  string(261) "  configuration: --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-gpl --enable-postproc --enable-nonfree"
  [3]=>
  string(40) "  libavutil      54. 23.101 / 54. 23.101"
  [4]=>
  string(40) "  libavcodec     56. 39.101 / 56. 39.101"
  [5]=>
  string(40) "  libavformat    56. 33.101 / 56. 33.101"
  [6]=>
  string(40) "  libavdevice    56.  4.100 / 56.  4.100"
  [7]=>
  string(40) "  libavfilter     5. 16.101 /  5. 16.101"
  [8]=>
  string(40) "  libswscale      3.  1.101 /  3.  1.101"
  [9]=>
  string(40) "  libswresample   1.  1.100 /  1.  1.100"
  [10]=>
  string(40) "  libpostproc    53.  3.100 / 53.  3.100"
  [11]=>
  string(32) "Input #0, flv, from 'video.flv':"
  [12]=>
  string(11) "  Metadata:"
  [13]=>
  string(25) "    major_brand     : M4V"
  [14]=>
  string(23) "    minor_version   : 1"
  [15]=>
  string(39) "    compatible_brands: M4V M4A mp42isom"
  [16]=>
  string(26) "    date            : 2008"
  [17]=>
  string(71) "    copyright       : © 2008 Blender Foundation | www.bigbuckbunny.org"
  [18]=>
  string(36) "    title           : Big Buck Bunny"
  [19]=>
  string(43) "    artist          : Peach Open Movie Team"
  [20]=>
  string(56) "    composer        : Sacha Goedegebure / Ton Roosendaal"
  [21]=>
  string(35) "    encoder         : Lavf55.33.100"
  [22]=>
  string(59) "  Duration: 00:09:56.58, start: 0.058000, bitrate: 663 kb/s"
  [23]=>
  string(88) "    Stream #0:0: Video: h264 (High), yuv420p, 640x360, 24.42 fps, 24 tbr, 1k tbn, 48 tbc"
  [24]=>
  string(61) "    Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s"
  [25]=>
  string(90) "[h263 @ 0x1ef5f60] The specified picture size of 640x360 is not valid for the H.263 codec."
  [26]=>
  string(77) "Valid sizes are 128x96, 176x144, 352x288, 704x576, and 1408x1152. Try H.263+."
  [27]=>
  string(33) "Output #0, 3gp, to 'outfile.3gp':"
  [28]=>
  string(11) "  Metadata:"
  [29]=>
  string(25) "    major_brand     : M4V"
  [30]=>
  string(23) "    minor_version   : 1"
  [31]=>
  string(39) "    compatible_brands: M4V M4A mp42isom"
  [32]=>
  string(26) "    date            : 2008"
  [33]=>
  string(71) "    copyright       : © 2008 Blender Foundation | www.bigbuckbunny.org"
  [34]=>
  string(36) "    title           : Big Buck Bunny"
  [35]=>
  string(43) "    artist          : Peach Open Movie Team"
  [36]=>
  string(56) "    composer        : Sacha Goedegebure / Ton Roosendaal"
  [37]=>
  string(35) "    encoder         : Lavf55.33.100"
  [38]=>
  string(60) "    Stream #0:0: Video: h263, none, q=2-31, 128 kb/s, 24 fps"
  [39]=>
  string(13) "    Metadata:"
  [40]=>
  string(42) "      encoder         : Lavc56.39.101 h263"
  [41]=>
  string(52) "    Stream #0:1: Audio: amr_nb, 0 channels, 128 kb/s"
  [42]=>
  string(13) "    Metadata:"
  [43]=>
  string(55) "      encoder         : Lavc56.39.101 libopencore_amrnb"
  [44]=>
  string(15) "Stream mapping:"
  [45]=>
  string(54) "  Stream #0:0 -> #0:0 (h264 (native) -> h263 (native))"
  [46]=>
  string(66) "  Stream #0:1 -> #0:1 (mp3 (native) -> amr_nb (libopencore_amrnb))"
  [47]=>
  string(119) "Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height"
}

【问题讨论】:

  • 如果您列出了失败案例的完整 ffmpeg 日志,将会有所帮助。
  • 我明白了吗?为什么还有很多其他 ffmpeg 问题以及为什么 ffmpeg 标签甚至存在?

标签: linux ffmpeg centos command


【解决方案1】:

您在格式编码的问题之间混为一谈。 .3gp.flv 只是容器格式,文件包含这种格式的媒体这一事实并不能告诉我们有关媒体编码的太多信息。 ffmpeg 可以计算输入编码,但不知道您要如何编码输出文件。你要找的是这个:

ffmpeg -i infile.flv -strict -2 -c:v h264 -c:a aac outfile.3gp

上面这行告诉 ffmpeg 将视频编码为 h.264,音频编码为 aac,然后将其打包到 .3gp 容器中。

【讨论】:

    【解决方案2】:

    您的 ff mpeg 包似乎有问题。尝试从您的包管理器安装它。

    或者使用 ffmpeg 的任何 gui 前端,例如 移动媒体转换器。 mmc 包含运行良好的 ffmpeg 的稳定版本。

    【讨论】:

      【解决方案3】:

      由于3gp是一种灵活的容器格式,你必须给ffmpeg一些参数,如视频比特率、帧大小、视频编解码器、音频比特率、音频编解码器

      例如,从forum中提取的以下代码:

      ffmpeg -i input.flv -b 300k -s 320x240 -vcodec mpeg4 -ac 2 -ab 128k -acodec libfaac output.3gp
      

      【讨论】:

      • 只有 3gp 是这样的,还是其他任何视频格式都需要这样的东西?
      • 正如here 所说:By default, FFmpeg tries to convert as losslessly as possible: It uses the same audio and video parameters for the outputs as the one specified for the inputs. 所以最好明确地传递这些主要参数并控制你的输出,而不是让 ffmpeg 尝试无损转换并失败。
      • 但我无法通过 320x240 的所有视频!!
      • 这是一个例子,你可以传递任何你想要的尺寸,但对于 3gp 这是一种面向移动设备的格式,你需要传递小的值。尝试仅对 3gp 转换和格式类似的输出失败设置大小:[...]maybe incorrect parameters such as bit_rate, rate, width or height"
      • 示例中的视频选项为:-b bitrate(设置视频比特率,单位为 bit/s)-s size(设置帧大小。格式为 WidthxHeight)-vcodec codec(强制视频编解码器为编解码器)
      猜你喜欢
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 2018-10-17
      • 2015-12-19
      相关资源
      最近更新 更多