iPhone慢动作视频转码

时间:2015-01-28 11:24:01

标签: ios iphone video ffmpeg transcode

我正在开发上传视频(从iPhone拍摄)到我的服务器。

但是,我不知道如何实施。

欢迎任何源代码objective-c or swift

我有1 20fps or 240fps个视频(它是一个慢动作)。 当我在iPhone6上播放这些视频时。我可以看到慢动作效果。 (我知道播放帧率是30fps。)

我希望在上传到我的服务器之前将该​​视频转换为120/240 fps to 30fps video。 (我的意思是不调整播放帧速率,这意味着视频转码为30fps。) 另外,我想检查慢动作效果起点和终点。 (也许iPhone会将此信息记录到视频二进制文件中(它可能位于文件的标题中。)

好吧,我想如果我使用ffmpeg库,它应该很容易(?)。

所以欢迎任何建议。

2 个答案:

答案 0 :(得分:3)

以下是我用于导入Adobe Premiere的ffmpeg命令行:

  • 视频:

    ffmpeg -i -filter“setpts = 4.0 * PTS”-r 30 -an videofilename.mp4

    “4.0”in-filter表示iphone slomo视频以120fps拍摄,即4 x 30fps;相关的“-r 30”参数是30fps。例如,如果要导出为60fps,请使用setpts =“2.0 * PTS”-r 60.有道理吗?

    - 放弃音频流

  • 音频:

    ffmpeg -i -filter“setpts = 4.0 * PTS”audiofilename.mp3

此时,您将视频和音频流放在单独的文件中。您可以使用ffmpeg重新组合它们...... 但有一个问题:iPhone将以正常速度录制音频流,这意味着转换后的音轨将比转换后的视频轨道短4倍(在我的示例中)。如果您使用Premiere,请导入视频和音频文件,右键单击时间轴中的音轨,选择“速度/持续时间”,然后设置速度= 25%(或120fps到60fps的50%)

答案 1 :(得分:0)

对于具有 44100音频采样率 120fps 素材:

ffmpeg -i in.MOV -filter_complex "[0:v]setpts=4.0*PTS[v];[0:a]asetrate=11025,aresample=44100[a]" \
-map "[v]" -map "[a]" -r 30 out.mp4

对于具有 44100音频采样率 240fps 素材:

ffmpeg -i in.MOV -filter_complex "[0:v]setpts=8.0*PTS[v];[0:a]asetrate=5512.5,aresample=44100[a]" \
-map "[v]" -map "[a]" -r 30 out.mp4

对于具有 48000音频采样率 240fps 素材:

ffmpeg -i in.MOV -filter_complex "[0:v]setpts=8.0*PTS[v];[0:a]asetrate=6000,aresample=48000[a]" \
-map "[v]" -map "[a]" -r 30 out.mp4

最终视频的质量会很差。提高质量本身就是一门科学https://trac.ffmpeg.org/wiki/Encode/H.264,目前,-crf参数(在0–63范围内的数字较小)似乎是提高质量的最简单方法(以文件大小为代价)和编码时间)。例如,在-crf 18之前使用out.mp4

基于FFMPEG文档:https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

借助https://superuser.com/questions/292833/how-to-change-audio-frequency来降低音频速度(链接atempo=2.0,atempo=2.0会带来可怕的声音结果)。