web-dev-qa-db-ja.com

ffmpegでビデオの複数の部分をカットします

私がやろうとしていることでは、ビデオファイルのいくつかの部分を削除し、そこから新しいものを作成する必要があります。

たとえば、次のようなビデオファイルから:

===================

私は2つのカットをします

======||=====||||==

そして、新しい小さなビデオファイルを生成します。

=============

そして、私が2と言うとき、私はビデオファイルに応じて任意の数の別々のカットを意味します。

1つの部分だけをカットしたい場合は、次のようにします。

ffmpeg -i video.mp4 -ss 00:00:03.500 -to 00:00:08.500 -async 1 cut.mp4 -y

これは完璧に機能します。私はおそらくこれを何度も行ってからすべてのカットを結合することができます...しかし、これは大きなビデオファイルには非常に非効率的です。

私が見ていた2つのカットを行うためにfilter_complex。私は何時間もそれを正しくしようとしてきましたが、これを機能させることができないようです:/

このようなことをすると、音声のないビデオが表示されます。

command  = 'ffmpeg -i video.mp4 \
    -filter_complex "\
        [0]trim=start_frame=10:end_frame=20[v0];\
        [0]trim=start_frame=30:end_frame=40[v1];\
        [v0][v1]concat=n=2[v5]"\
     -map [v5]  -async 1 output.mp4'

私がこれをやろうとすると、物事はすべて台無しになります:

ffmpeg -y -i video.mp4 \
    -filter_complex "\
        [0:v]trim=start_frame=10:end_frame=20[v0];\
        [0:a]atrim=start=10:end=20[a0];\
        [0:v]trim=start_frame=30:end_frame=40[v1];\
        [0:a]atrim=start=30:end=40[a1];\
        [v0][a0][v1][a1]concat=2:v=1:a=1[v5][a]"\
     -map [v5] -map [a] -async 1 output.mp4

私もPython withffmpeg-pythonhttps://github.com/kkroening/ffmpeg-python しかし、オーディオを機能させることもできません。

誰かが私にこれについていくつかの助けを与えることができますか?どうもありがとうございました!!

9
Mike Baum

これには、選択フィルターの方が適しています。

ffmpeg -i video -vf "select='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',setpts=N/FRAME_RATE/TB" -af "aselect='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',asetpts=N/SR/TB" out.mp4

selectとそれに対応するフィルターは、それぞれビデオとオーディオに適用されます。選択されるセグメントは、4〜6.5秒、17〜26秒、最後に74〜91秒です。タイムスタンプは、setptsとそれに対応するフィルターで連続的に作成されます。

10
Gyan