回答:
MP4Boxでできます。
コマンド
MP4Box -add SourceMovie.mp4#video -raw 1 -new test
ファイルtest
とを作成しますtest_track1.h264
。サポートされているフレームレート(この例では30)でmp4ファイルを作成できるようになりました。
MP4Box -add test_track1.h264:fps=30 -new DestMovie.mp4
MP4Boxはgpac
パッケージの一部であるため、インストールされていることを確認してください。
-single
最初のコマンドにはオプションを使用することをお勧めします。2 MP4Box -single 1 -raw 1 SourceMovie.mp4
つではなく1つのファイルのみを作成しますSourceMovie_track1.h264
。
ビデオ(コンテナ)のヘッダーのフレームレートを変更しても、ビデオストリーム(またはオーディオストリーム)自体には影響しません。再エンコードが唯一のオプションです。
ビデオストリームにはタイムスタンプがあり、ほとんどのビデオでは、フレーム間圧縮のためにフレームが相互に依存しています。一部のプレーヤーは、埋め込みコマンドなどによってではなく、ビデオの速度を上げたり下げたりできます。containercommandがそうするように要求するとき、プレーヤーはその場でフレームレートを変更できません。ビデオファイルは仕様から外れてしまい(つまり、標準に準拠していない)、プレーヤーの99.9%がそれに従うことを拒否します。コーディングし直さずに必要なことを行うことはまったく不可能です。もちろん、編集の最後のステップまで再コーディングを待つことができます。
ファイルをMP4として保持するのではなく、スローモーションで再生することが主な目的である場合は、MKVmerge GUIツールを使用して、フレームレートを簡単に変更できるMatroskaコンテナーに再多重化できます。再多重化はメタデータのみを変更し、ストリーム自体は変更しないため、再エンコードよりもはるかに優れています。
最初にパッケージをインストールします
sudo apt-get install mkvtoolnix-gui
次に、MKVmerge GUIを起動します。このようなウィンドウに直面するでしょう
[追加]ボタンを押してファイルを選択するか、ファイルを[入力ファイル]領域にドラッグアンドドロップするだけです。この時点で、ビデオのビデオストリームを選択できるはずです。他のストリームも削除できます。何とか邪魔になるからです。
選択すると、下のタブがアクティブになります。
「特定のアクションのフォーマット」に変更します
1秒あたりのフレームの値を入力できるフィールド「FPS」があることがわかります。速度を4倍遅くすることを計画しているように見えたので、1秒あたり約7フレームが目標です。「ストレッチ」オプションを使用することもできます。
その後、出力ファイルの名前を変更するだけで(必要な場合)、「Start muxing」を押すことができます。
プログラムが実行され、ファイルがあるはずです。
また、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を使用)。