ffmpeg 将任何文件转换为任何文件

ffmpeg convert any file to any file

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

例如

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"
}

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

例如下面的代码摘自forum

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

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

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

您混淆了 formatencoding 的问题。 .3gp.flv 只是容器格式,文件包含这种格式的媒体这一事实并不能告诉我们太多关于媒体编码的信息。 ffmpeg 可以确定输入编码,但不知道您想如何对输出文件进行编码。你要找的是这个:

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

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