長いビデオを複数の短いビデオに効率的に分割するにはどうすればよいですか?


0

ffmpegを使用して、各セグメントの開始時間と期間を指定できます。たとえば、私は書いた

ffmpeg -i "originalvideo.mp4" -ss 00:00 -t 2:34 -vcodec copy -acodec copy "smallervideo1.mp4"

3つの列があるスプレッドシートがあります。小さいビデオの名前、開始時間、終了時間。ビデオごとにコマンドを個別に作成することもできますが、ソースファイルを100個近くの小さなビデオに分割しているため、時間がかかります。

スプレッドシートからffmpegに値を渡し、適切な名前の各ビデオを自動的に出力できる方法はありますか?

回答:


1

これは、単純なシェルスクリプト、この場合はBashスクリプトを使用して実行できます。入力として空白で区切られたファイルがあり、出力ファイル名、開始タイムスタンプ、終了タイムスタンプが含まれている場合:

$ cat cuts.txt
foo.mp4 00:00:00 00:00:01
bar.mp4 00:01:20 00:02:00

次に、これを単純なループで読み取り、ffmpegコマンドを作成します。

while read -r filename start end; do
  ffmpeg -i "input.mp4" -ss "$start" -to "$end" -c copy "$filename"
done < cuts.txt

これ-c copyはエンコードせずにビットストリームをカットするだけです- 略記です-vcodec copy -acodec copy(字幕もコピーします)。ビデオエンコーダー(例-c:v libx264)およびオーディオエンコーダー(例:)を指定して、ビデオ-c:a aac -b:a 192kを再エンコードできます。

より移植性の高い、しかしPython 3を使用した基本バージョン:

#!/usr/bin/env python3
import subprocess
with open("cuts.txt") as f:
  for line in f.readlines():
    filename, start, end = line.strip().split(' ')
    cmd = ["ffmpeg", "-i", "input.mp4", "-ss", start, "-to", end, "-c", "copy", filename]
    subprocess.run(cmd, stderr=subprocess.STDOUT)

注:Windowsでこれを実行する場合、ffmpegをPATHに追加するか、のようなフルパスを指定する必要がありますC:/Program Files/ffmpeg/bin/ffmpeg.exe


ありがとう@slhck。私はスプレッドシートを持っていますが、私はそれを簡単にそのフォーマットに入れることができると思います。これを試してみます。
マイケルホーウィッツ

たとえば、ExcelからCSVにエクスポートするだけで、区切り文字として1つのスペースを使用できます。または、区切り文字としてカンマがある場合は、while read -r -d, filename start end …別の区切り文字を指定するために使用します。(.split(',')その場合はPythonで使用します。)
slhck

私はWindowsを使用しているため、Pythonアプローチを採用しました。私は立ち往生し、私は問題が何であるかわからない。私のコードはimport subprocess with open("cuts3.txt") as f: for line in f.readlines(): filename, start, end = line.strip().split(' ') cmd = 'C:\ffmpeg\bin\ffmpeg.exe -i Recordings\recording6.6.17.mp4 -ss {start} -to {end} -c copy "{filename}"'.format(**locals()) subprocess.run(cmd, shell=True) print ("loop over")txtファイルですGreetings.mp4 0:00:00 0:02:35 Introduction.mp4 0:02:35 0:05:10
Michael Horwitz

@MichaelHorwitzコメントは、この種のトラブルシューティングにはあまり役に立ちません。ブロックコードのフォーマットはそこでは機能しません。しかし、エラーメッセージは表示されますか?Windowsでは、スラッシュを使用してコマンドを実行する必要があることに注意してください。
slhck

上記の私の編集を参照してください、これはあなたのためにうまくいくかもしれません。
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.