1. ホーム
  2. ffmpeg

[解決済み] FFmpeg 動画を効率よく分割するには?

2022-11-13 09:29:18

質問

大きな avi ビデオを 2 つの小さな連続したビデオに分割したいのですが。私は ffmpeg を使用しています。

一つの方法は、ffmpegを2回実行することです。

ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 output1.avi
ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi

しかし、ffmpeg の man ページによると、1 つの入力ファイルから複数の出力ファイルを作成するには、単に 一つ の行を使うことで複数の出力ファイルを作ることができます。

ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 output1.avi \
   -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi

質問ですが、後のアプローチは計算時間やメモリを節約できるのでしょうか?

どのように解決するのですか?

ffmpeg wiki は、"How to split video efficiently" に関連して、このページにリンクしています。私はこのページがその質問に答えているとは確信していないので、@AlcubierreDrive が提案したようにしました...

echo "Two commands" 
time ffmpeg -v quiet -y -i input.ts -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 -sn test1.mkv
time ffmpeg -v quiet -y -i input.ts -vcodec copy -acodec copy -ss 00:30:00 -t 01:00:00 -sn test2.mkv
echo "One command" 
time ffmpeg -v quiet -y -i input.ts -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 \
  -sn test3.mkv -vcodec copy -acodec copy -ss 00:30:00 -t 01:00:00 -sn test4.mkv

どの出力が...

Two commands
real    0m16.201s
user    0m1.830s
sys 0m1.301s

real    0m43.621s
user    0m4.943s
sys 0m2.908s

One command
real    0m59.410s
user    0m5.577s
sys 0m3.939s

SD & HD ファイルをテストし、数回実行した後 & 少し計算しました。

Two commands SD 0m53.94 #2 wins  
One command  SD 0m49.63  

Two commands SD 0m55.00  
One command  SD 0m52.26 #1 wins 

Two commands SD 0m58.60 #2 wins  
One command  SD 0m58.61 

Two commands SD 0m54.60  
One command  SD 0m50.51 #1 wins 

Two commands SD 0m53.94  
One command  SD 0m49.63 #1 wins  

Two commands SD 0m55.00  
One command  SD 0m52.26 #1 wins 

Two commands SD 0m58.71  
One command  SD 0m58.61 #1 wins

Two commands SD 0m54.63  
One command  SD 0m50.51 #1 wins  

Two commands SD 1m6.67s #2 wins  
One command  SD 1m20.18  

Two commands SD 1m7.67  
One command  SD 1m6.72 #1 wins

Two commands SD 1m4.92  
One command  SD 1m2.24 #1 wins

Two commands SD 1m1.73  
One command  SD 0m59.72 #1 wins

Two commands HD 4m23.20  
One command  HD 3m40.02 #1 wins

Two commands SD 1m1.30  
One command  SD 0m59.59 #1 wins  

Two commands HD 3m47.89  
One command  HD 3m29.59 #1 wins  

Two commands SD 0m59.82  
One command  SD 0m59.41 #1 wins  

Two commands HD 3m51.18  
One command  HD 3m30.79 #1 wins  

SDファイル = 1.35GB DVBトランスポートストリーム

HDファイル = 3.14GB DVBトランスポートストリーム

結論

HD を処理する場合は、単一コマンドを使用したほうがよく、入力ファイルの後に -ss を使用して「スローシーク」を行うというマニュアルのコメントと一致します。SD ファイルでは、その差はごくわずかです。

2 コマンドのバージョンでは、入力ファイルの前にもう 1 つの -ss を追加して、「高速シーク」に続いてより正確な「低速シーク」を行うことで、より速く実行できるようになります。