我正在开发上传视频(从iPhone拍摄)到我的服务器。
但是,我不知道如何实施。
欢迎任何源代码objective-c or swift
。
我有1 20fps or 240fps
个视频(它是一个慢动作)。
当我在iPhone6上播放这些视频时。我可以看到慢动作效果。
(我知道播放帧率是30fps。)
我希望在上传到我的服务器之前将该视频转换为120/240 fps to 30fps video
。 (我的意思是不调整播放帧速率,这意味着视频转码为30fps。)
另外,我想检查慢动作效果起点和终点。
(也许iPhone会将此信息记录到视频二进制文件中(它可能位于文件的标题中。)
好吧,我想如果我使用ffmpeg库,它应该很容易(?)。
所以欢迎任何建议。
答案 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
会带来可怕的声音结果)。