使用 FFMPEG 将 mp4 转换为最大支持移动设备的 MP4 [关闭]

Posted

技术标签:

【中文标题】使用 FFMPEG 将 mp4 转换为最大支持移动设备的 MP4 [关闭]【英文标题】:Convert mp4 to maximum mobile supported MP4 using FFMPEG [closed] 【发布时间】:2012-11-13 16:39:13 【问题描述】:

我想使用ffmpegmp4 转换为“小尺寸”mp4 ...

我需要一个带有h263 视频和aac 音频的mp4 文件(或低成本移动设备支持的一些其他设置)。我主要担心的是视频可以在大多数设备上播放。

有哪些可能的ffmpeg 命令来完成此操作?

提前致谢。

【问题讨论】:

【参考方案1】:
 ffmpeg.exe -i "input.mp4" -vcodec mpeg4 -preset slower -b:v 1000k -vf "scale=640:480,setsar=1,fps=30,pad=640:480:0:0" -acodec aac -ac 2 -ar 22050 -ab 128k "output (480p).mp4"

【讨论】:

虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。 @Yunnosch 的观点始终很重要,但当社区已经验证了已接受的答案时,这一点尤其很重要。在什么条件下您的方法可能更受欢迎?您是否在利用新功能?【参考方案2】:

编码 mp4 视频的方法有很多种,而为移动设备编码则更加复杂。我不确定您所说的“低成本移动设备”是指设备中的低成本,还是播放所述视频所需的带宽?

不管怎样,这里有一个帖子可以让你继续前进:H.264 WEB VIDEO ENCODING TUTORIAL WITH FFMPEG

示例

这里有一些来自帖子的ffmpeg 示例...

“标准”网络视频(480p,500kbit/s):

ffmpeg -i input_file.avi -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 output_file.mp4

适用于旧款手机的 360p 视频(基线为 250kbit/s 的 360p 个人资料):

ffmpeg -i inputfile.avi -vcodec libx264 -vprofile baseline -preset slow -b:v 250k -maxrate 250k -bufsize 500k -vf scale=-1:360 -threads 0 -acodec libvo_aacenc -ab 96k output.mp4

适用于 iPad 和平板电脑的 480p 视频(主配置文件中 480p,400kbit/s):

ffmpeg -i inputfile.avi -vcodec libx264 -vprofile main -preset slow -b:v 400k -maxrate 400k -bufsize 800k -vf scale=-1:480 -threads 0 -acodec libvo_aacenc -ab 128k output.mp4

用于存档/存储的高质量标清视频(PAL 在高 1Mbit/s 个人资料):

ffmpeg -i inputfile.avi -vcodec libx264 -vprofile high -preset slower -b:v 1000k -vf scale=-1:576 -threads 0 -acodec libvo_aacenc -ab 196k output.mp4

比特率、规模和配置文件...

从那里的示例中,您可能需要注意的一些关键事项是......

-b:v 500k

-b:a 128k

这些是视频v 和音频a 的比特率,数字越小,质量越低,但在低端设备上“播放”的效果就越好。

scale=-1:480

这会将视频缩小到更小的尺寸,请参阅帖子中的更多信息)

-vprofile baseline

这个看似奇怪的baseline(或另一个合适的profile parameter)在为某些低成本(例如android)设备编码时可能很重要......

基线配置文件 (BP)

主要用于需要额外数据丢失的低成本应用程序 健壮性,此配置文件用于某些视频会议和移动设备 应用程序。此配置文件包括支持的所有功能 受约束的基线配置文件,加上三个额外的功能, 可用于损失鲁棒性(或用于其他目的,例如 低延迟多点视频流合成)。的重要性 自从定义 2009 年约束基线配置文件。所有约束基线配置文件 比特流也被认为是基线配置文件比特流,因为 这两个配置文件共享相同的配置文件标识符代码值。

【讨论】:

这个全部转换,我的输入输出文件格式一样。 我正在尝试使用您的 360p 命令将 AVI 转换为 MP4,但“-acodec libvo_aacenc -ab 128k”不起作用,如果我将其替换为“-acodec copy”,它可以工作,它错误是“为输出流 #0:0 打开编码器时出错 - 可能是不正确的参数,例如 bit_rate、rate、width 或 height”。我应该为音频设置更多参数吗?如果是,params 是什么? @user1202498 -acodec copy 实际上根本不会对您的音频进行编码,而只是将音频流从旧文件复制到新文件中。如果你支持libvo_aacenc(是吗?)你不应该设置任何特别的东西。也可以试试-codec:a aac -strict experimental 使用ffmpeg原生的aac编码。 非常感谢,所有解决方案都有过时的参数 -movflags +faststart 输出选项怎么样,以便“将一些信息移动到文件的开头并允许视频在完全下载之前开始播放”-trac.ffmpeg.org/wiki/Encode/H.264#faststartforwebvideo ?【参考方案3】:

我找到答案了,还是谢谢你的帮助。

ffmpeg -i $input_file -s $size $output_file

$size : 320X400 或任何 WidthXHeight

【讨论】:

这并不能回答您的问题。贾斯汀詹金斯的回答更加完整和有见地。链接的博客文章还提供了更多详细信息来回答这个为移动设备编码视频的复杂问题。 这只是旋转而不做任何修改,正是我想要的,我不想要文档链接 @Susheel:该命令行根本不进行旋转,它会调整大小 - 无需设置编解码器或比特率(这是问题所要求的)。

以上是关于使用 FFMPEG 将 mp4 转换为最大支持移动设备的 MP4 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG 转换的 mp4 文件无法在 firefox 和 chrome 中播放

用于将 HTML5 视频转换为 mp4 和 ogg 的 ffmpeg 设置 [关闭]

使用 ffmpeg 将 Mp4 转换为 HLS

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

如何使用 ffmpeg 将 MP4 转换为 WMV 以获得更好的质量?

无法使用 ffmpeg 将在线 gif 转换为 mp4 视频