3

我正在开发上传视频(取自 iPhone)到我的服务器。

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

任何源代码objective-cswift将受到欢迎。

我有120fps240fps视频(这是一个慢动作)。当我在我的 iPhone6 上播放这些视频时。我可以看到慢动作效果。(我知道播放帧速率是30fps。)

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

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

因此,任何建议都将受到欢迎。

4

2 回答 2

3

以下是我用来导入 Adob​​e Premiere 的 ffmpeg 命令行:

视频:

ffmpeg -i <input MOV> -filter "setpts=4.0*PTS" -r 30 -an videofilename.mp4

4.0in-filter表示 iphone slomo 视频以 120fps 拍摄,即4 × 30fps;相关-r 30参数适用于 30fps。例如,如果要导出为 60fps,请使用setpts="2.0*PTS" -r 60

-an丢弃音频流

声音的:

ffmpeg -i <input MOV> -filter "setpts=4.0*PTS" audiofilename.mp3

此时,您在单独的文件中拥有视频和音频流。您可能可以使用 ffmpeg 重新组合它们。

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

于 2016-05-25T21:27:37.773 回答
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会产生可怕的结果)。

于 2019-09-28T21:39:53.440 回答