Answers:
MP4Box可以做到。
命令
MP4Box -add SourceMovie.mp4#video -raw 1 -new test
创建文件test
和test_track1.h264
。现在,您可以使用所需的任何支持帧速率创建mp4文件(在此示例中为30):
MP4Box -add test_track1.h264:fps=30 -new DestMovie.mp4
MP4Box是gpac
包装的一部分,因此请确保已安装。
-single
在第一个命令中使用option。MP4Box -single 1 -raw 1 SourceMovie.mp4
仅创建一个文件,SourceMovie_track1.h264
而不是两个。
更改视频(容器)标题中的帧速率不会影响视频流(或音频流)本身。重新编码是唯一的选择。
视频流具有时间戳,在大多数视频中,帧之间由于帧间压缩而相互依赖。有些播放器可以加快和减慢视频播放速度,但不能通过嵌入式命令或其他方式来加快播放速度。当container命令要求时,任何玩家都无法即时更改帧速率。视频文件最终将超出规范(即不遵循标准),并且99.9%的播放器将拒绝遵守该文件。不进行编码就完全不可能做您想做的事情。当然,您可以等待重新编码,直到编辑的最后一步。
如果您的主要意图是慢动作播放而不是将文件保留为MP4,则可以使用MKVmerge GUI工具将其重新混合到Matroska容器中,该容器可以轻松更改帧率。重混合比重新编码好得多,因为它仅更改元数据,而不更改流本身。
首先安装软件包
sudo apt-get install mkvtoolnix-gui
然后,您启动MKVmerge GUI。您将面对这样的一个窗口
只需按添加按钮并选择您的文件,甚至只需将文件拖放到“输入文件”区域即可。此时,您应该可以选择视频中的视频流。您也可以删除其他流,因为它们总是会妨碍您的操作。
选择之后,您应该会看到底部的选项卡处于活动状态:
更改为“格式化特定操作”
您会看到有一个“ FPS”字段,您可以在其中输入每秒的帧数。您似乎打算减慢速度四倍,因此大约每秒7帧是您的目标。您也可以使用“ Stretch by”选项。
之后,您可以更改输出文件的名称(如果需要),然后按“开始混合”。
该程序将运行,您应该拥有文件。
我还希望无损地将我的120 FPS电影减慢到30 FPS。我制作了通过更改声音速度并直接在MP4容器中修改FPS来执行此操作的脚本。需要以下工具:
用于转换的脚本在这里:
#!/bin/bash
#########################################
# Lossless slow down from 120 to 30 FPS #
# #
# Use: #
# #
# slow.bash <mp4_file> #
# #
# #-= OSi =-# #
#########################################
# Prepare basic variables
IN_FILE="$1"
NAME=$(echo "${IN_FILE}" | sed 's/\.[^.]*//')
# Clean up before start
rm -f "${NAME}.ac3" "${NAME}.wav" "${NAME}_.wav" "${NAME}" "${NAME}_track1.h264" "${NAME}_slow.mp4"
# Slow down sound
avconv -i "${IN_FILE}" -vn -acodec pcm_s16le "${NAME}_.wav"
soundstretch "${NAME}_.wav" "${NAME}.wav" -tempo=-75
avconv -i "${NAME}.wav" -vn -codec:a ac3_fixed -b:a 448k "${NAME}.ac3"
# Change video frame rate and multiplex with slowed sound
MP4Box -add "${IN_FILE}#video" -raw 1 -new "${NAME}"
MP4Box -add "${NAME}_track1.h264:fps=30" -add "${NAME}.ac3" -new "${NAME}_slow.mp4"
# Clean up when we are done
rm -f "${NAME}.ac3" "${NAME}.wav" "${NAME}_.wav" "${NAME}" "${NAME}_track1.h264"
此脚本使用_slow后缀创建MP4的副本。
MP4Box -add source.mp4#video -raw 1 -new test
),然后再次将其另存为MP4(MP4Box -add test_track1.h264:fps=30 -new dest.mp4
)。您也可以在此处添加音频轨道(通过#audio)。