web-dev-qa-db-ja.com

Ubuntuで複数の(3つ以上の)ビデオをマージする方法は?

各20個のバッチサイズでビデオをマージします。 Linuxマシンを実行しています。ビデオはmp4形式で、中程度の品質です。オーディオストリームが欠落している場合もあります。これまでのところ、ffmpegmencodercvlc/vlc、およびMP4Boxを試しました。私はバッチ処理を行っているので、これを達成するためにコマンドラインスクリプトを書きたいです。

主な問題は、私が試したいくつかのソリューションが2つのビデオでうまく機能すること、オーディオストリームを含むビデオでうまく機能すること、そしてビデオセットの他のサブセットでうまく機能することです。しかし、私はこのタスクの包括的なソリューションを見つけることができませんでした。

32
Dhruv Singal

これで問題が解決しました: https://stackoverflow.com/a/22324018/5014767

meltは、このための優れたコマンドラインユーティリティです。 ここ はページです

コメントから編集:私の問題を解決したコマンドはこれでしたmelt {input-sequence} -consumer avformat:{output-name} acodec=libmp3lame vcodec=libx264

6
Dhruv Singal

mkvmergeを使用して、複数のMP4ファイルを1つのファイルに結合しています。

mkvmerge -o outfile.mkv infile_01.mp4 \+ infile_02.mp4 \+ infile_03.mp4
37

ffmpegを使用して実行できます。

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

参照および詳細

24
Maythux

Ffmpegを使用してトランスコーディングせずにMP4を連結するための小さなシェルスクリプトを作成しました。

for f in $(ls *.MP4); do
    ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
done

CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")

ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4

rm *.ts

これにより、MPEGコンテナに中間ファイルが作成され、それらがMP4に連結されます。

4
RawwrBag

純粋にbashおよびffmpegのスクリプト。コマンドラインで指定されたファイルを1つに再エンコードします。

ファイルは同じ解像度である必要があります。 ffmpeg concat:がサポートしないさまざまなメタデータのローテーションを受け入れます。

rm ffmpeg-concat-output.mkv

FILE_COUNT=$#
INPUTS=""
FILTER=""
INDEX=0
for FNAME in $@; do
    echo "Processing ${FNAME}"
    INPUTS="${INPUTS} -i $FNAME"

    if [ -z "${FILTER}" ]; then
        FILTER="[$INDEX:v:0] [$INDEX:a:0]"
    else
        FILTER="${FILTER} [$INDEX:v:0] [$INDEX:a:0]"
    fi
    let INDEX+=1
done

COMMAND="ffmpeg ${INPUTS} \
    -filter_complex '${FILTER} \
        concat=n=${INDEX}:v=1:a=1 [v] [a]' \
    -map '[v]' -map '[a]' \
    ffmpeg-concat-output.mkv"

#   -af 'volume=15dB' # won't work with -filter_complex

bash -c "${COMMAND}"
0

Pythonスクリプト を作成しました。これは moviepy を使用して、サブセグメントも連結できます(たとえば、ビデオから一部を削除する場合に便利です)。

以下で使用します:

vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>
0
Antonello