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

时间:2014-10-16 11:00:15

标签: php android iphone video ffmpeg

所以,我有点接受了这项工作,但我真的不确定它是否可行。

我们打算建立一个网站,用户可以从他们的计算机和手机浏览器上传视频。视频文件可以是各种宽高比,宽度,高度,编码和文件格式。

我可以在网络服务器上从php exec命令访问ffmpeg。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

https://handbrake.fr/

答案 1 :(得分:0)

如果您的目标只能是一种文件格式,那么我会选择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编码中引发错误。最好自己做数学。