ffmpeg将任何用户视频文件转换为在手机h264 mp4上运行


ffmpeg convert any user video file to run on mobiles h264 mp4

所以,我在工作中接受了这项任务,但我真的不确定这是否可能。

我们将建立一个网站,用户可以从电脑和手机浏览器上传视频。视频文件可以是大范围的纵横比、宽度、高度、编解码器和文件格式。

我将可以从web服务器上的php-exec命令访问ffmpeg。

是否可以使用此功能将用户文件转换为适用于计算机、android和iphone的一种文件格式。

要求是我们可以设置一个最大宽度,切换视频将缩放,动态匹配高度。

有人知道这是可以做到的,并且在合理的时间内完成。将在2天内完成项目。如果是这样的话,一些指向正确方向的指针会很好。

有同样的问题,但通过使用HandBrake开源视频转码器解决了

https://handbrake.fr/

如果你的目标只能是一种文件格式,那么我会选择mp4基线。(然而,有些浏览器不会播放它,这就是为什么html标签提供了多个源标志,其中通常包括webm和ogg视频…)

使用ffprobe -show_streams $uploadedFile可以获得文件的尺寸(和纵横比)。使用数学,你可以根据自己的需要获得新的尺寸。

$newDim=$new_width.":".$new_height;
$output  = shell_exec("/usr/bin/ffmpeg -i $uploadedFile -f mp4 '
-c:a libfdk_aac -b:a 128k -c:v libx264 -vprofile baseline '
-movflags faststart -vf scale=$newDim $output");```

以下是分类:

f mp4              > format mp4
c:a libfdk_aac     > audio codec
c:v libx264        > video codec
vprofile baseline  > minimal codec usage for mobile
movflags faststart > put the moov atom at the beginning of file
$output            > should have '.mp4' as a file ending

当然,关键在于细节(以及你可以向在线转换器抛出的处理核心的数量),但这至少会让你启动并运行。

编辑:确实回答了问题。:)

顺便说一句,ffmpeg确实提供了vf标志:-vf scale=320,-1,但有时它会给你一个不可被2整除的维度,这会在x264编码中引发错误。最好自己算。