の最初の20秒と最後の30秒を削除する必要がある100本の動画がいくつかあります。
明らかに、これを一度に1つずつ実行するのは実用的ではありません。どういうわけか、OS X Automatorスクリプトでこれを自動化できますか?
* nixとBashを実行していると仮定すると、オペレーティングシステムに対して ffmpeg静的ビルドをダウンロード 。次に、ffmpeg
ファイルを取得して/usr/bin/ffmpeg
にコピーします。
Sudo cp ~/Downloads/ffmpeg/ffmpeg /usr/bin/ffmpeg
Sudo chmod +x /usr/bin/ffmpeg
これで、このシェルスクリプトをBashで実行できます—ビデオがあるフォルダーにコピーアンドペーストするのに十分なはずです。
for f in *.mp4; do
duration=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
length=$(echo "$duration" | awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }' )
trim_start=20
trim_end=$(echo "$length" - 30 - "$trim_start" | bc)
echo ffmpeg -ss "$trim_start" -i "$f" -c copy -map 0 -t "$trim_end" "${f%.mp4}-trimmed.mp4"
done
注:echo
ステートメントを削除して、実際にコマンドを実行します。生成されたコマンドの精度を最初にテストすることをお勧めします。これにより、次のようなものが生成されます。
ffmpeg -ss 20 -i input.mp4 -c copy -map 0 -t 161.58 input-trimmed.mp4
スクリプトが行うことは、入力の合計実行時間を計算し、開始時間と終了から削除する時間を差し引いて、指定された開始時間から新しく計算された終了までストリームコピーを実行するようにffmpegに指示することです。時間。これにより、ビデオとオーディオの品質が損なわれることはありません。大きなファイルの場合でも、数秒以内に実行されるはずです。
明確にするために、-ss
は開始時間を設定し、-c copy -map 0
はすべてのビデオ、オーディオ、字幕ストリームをオリジナルからカットバージョンにコピーします。 -t
は終了時間を設定します。シークの詳細については、 FFmpeg Wikiのこの記事 を参照してください。
コマンドラインに慣れている場合は、 FFmpeg をお勧めします
ffmpeg -i file.mp4 -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output.mp4
もう1つのオプションは、ファイルをループして、ファイルごとに1ファイルのFFmpegジョブを実行する小さなシェルスクリプトです。繰り返しになりますが、私はMacシェルを使用したことはありません:)
for f in *.mp4; do ffmpeg -i $f -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output/$f; done
これが少し役立つことを願っています。