私が達成したいのは、私が得たのと同じ効果を得ることです(1.7倍のスピードアップを想定):
mplayer -af scaletempo -speed 1.7 myvideo.mp4
このコマンドは私が望むものを正確に与えてくれますが、どういうわけか結果をファイルに保存する必要があります。
私が取得したくないのはこれです:
mplayer -vf scale -speed 1.7 myvideo.mp4
Linuxボックスの外で再生する必要があるため、これをファイルで実行する必要があります(ファイルを再コーディングする必要があります)。
スクリプトで作成したいので、CLIの方が望ましいです。たくさんグーグルで検索して、たくさんの提案を見つけました-ffmpeg、mencoder、そして多くの面白いエキゾチックなコンパイル不可能なツール、正確な結果を私に与えるものは何もありません。実際、これはほとんど機能しません(かなり昔に機能したと思います)。
残念ながら、Ubuntu 13.04をアップグレードして使用しましたが、このバージョンではほとんどすべてのソリューションが機能しないようです;(
setpts および atempo フィルターでffmpeg
を使用する例:
ffmpeg -i input -filter_complex "[0:v]setpts=PTS/2[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output
ffmpeg -i input -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output
アテンポ値の範囲は0.5〜100です。
または、atempoの代わりに rubberband フィルターを使用すると、音が良くなる場合がありますが、ffmpeg
は--enable-librubberband
でコンパイルする必要があります。 ffmpeg -filters
を参照して、使用できるかどうかを確認できます。
ffmpeg -i input -filter_complex "[0:v]setpts=PTS/2[v];[0:a]rubberband=tempo=2[a]" -map "[v]" -map "[a]" output
ffmpeg -i input -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]rubberband=tempo=0.5[a]" -map "[v]" -map "[a]" output
これを試して:
ビデオ:
mkfifo stream.yuv
mplayer -vf scale -speed 1.7 -vo yuv4mpeg source.avi
cat stream.yuv | yuv2lav -o result.avi
または
ffmpeg -i source.avi -filter "setpts=PTS/1.7" result.avi
オーディオ:
mplayer -vf scale -speed 1.7 -vo null -ao pcm -ao pcm:file=result.wav source.avi
結果ファイル:result.avi、result.wav