web-dev-qa-db-ja.com

ffmpegはコマンドラインでffmpegと2つのmp4ファイルを結合します

次のコマンドを使用して、複数のファイルを正常に結合できます。

ffmpeg -f concat -i input.txt -codec copy output.mp4

このコマンドの唯一の問題は、input.txtというテキストファイルからファイルパスを読み取る必要があることです。

file 'C:\Users\fabio\Downloads\Super\Sharks\01.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\02.mp4'
file 'C:\Users\fabio\Downloads\Super\Sharks\03.mp4'

ファイルからファイルパスを読み込まずに同じ目標を達成する方法はありますか?私は運なしで以下を試みました:

ffmpeg -f concat -i file "C:\a\b\01.mp4" file "C:\a\b\02.mp4" -codec copy output.mp4
ffmpeg -f concat -i "C:\a\b\01.mp4" "C:\a\b\02.mp4" -codec copy output.mp4

別のコマンドを使う必要がありますか?

21
Fabio Delarias

2019年更新:

コメントで述べたように、Stack Overflowには、連結に使用できるオプションの詳細な説明と、使用しているファイルの種類に応じてどの方法を使用するかについての説明があります。

どうやってFFmpegを使って2つのMP4ファイルを連結しますか?

元の2016年の答え:

ファイルを結合するために 連結プロトコル メソッドを使うことができるはずです:

ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4

さらに、FFmpegマニュアルでは、MP4ファイルを損失なく結合するためにMP4ファイル専用の方法について説明していますが、一時ファイル(または名前付きパイプ)を作成する必要があります。

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
31
Carson Darling

Listをstdoutに出力し、ffmpegによってstdinからリストを読み取ることで、fileをlistに置き換えることができます。

(echo file 'a.mp4' & echo file 'b.mp4') | ffmpeg -protocol_whitelist file,pipe -f concat -safe 0 -i pipe: -vcodec copy -acodec copy "result.mp4"
3
Qwertiy

いいえ、ffmpeg concat demuxerを1つのコマンドラインで使用しても問題ありません。ファイルのリストを使って入力テキストファイルを作成する必要があります。私はこれが私自身奇妙だと思いました、多分誰かが後でこれもFFMpegを加えるでしょう。

この質問に対する受け入れられた答えは、OPが尋ねたものであるconcat demuxerではなく、concatプロトコルを使用します。

1
georgiecasey