フォルダにいくつかのチャンクがあります。
0001.mp4
0002.mp4
0003.mp4
...
0112.mp4
それらをfull.mp4にマージしたい
私は使用しようとしました:
avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
不明な入力形式: 'concat'
avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
不明な入力形式: 'concat'
avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \
-c:v copy -c:a copy /root/test/full.mp4
前の版では、1つの入力ファイルのみが出力にキャッチされました。
フォルダのすべてのチャンクを完全なビデオにマージする方法は?
Ffmpegなどを使いたくありません。 Avconvのみ。
avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4
コンテナのタイプで動作するかどうかはわかりません(AVI
で動作します)。
「受け入れられた」答えが示すように、mp4
ファイルを単純に連結することはできません。
それだけを実行すると、output.mp4
の内容のみがfile1.mp4
になります。
そうは言っても、元のファイルを正しくmpegストリームに分割する限り、元の質問で何をしようとしているかを実際に行うことができます。
次のコマンドは、input.mp4
をfile [1-3] .tsの3x 60秒セグメントに分割します。
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
-bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file1.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
-bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file2.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
-bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file3.ts
その後、他の答えが示唆するようにそれらを元に戻すことができます:
avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \
-bsf:a aac_adtstoasc -y full.mp4
このプロセスを使用して、以下で説明されているスケーラブルな並列トランスコーダーを作成しました。
Mp4の場合、私が見つけた唯一の有効なソリューションは、gpacパッケージのMP4Boxでした。
#!/bin/bash
filesList=""
for file in $(ls *.mp4|sort -n);do
filesList="$filesList -cat $file"
done
MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4
またはコマンドは
MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4
mencoderとavconvでは、動作させることができませんでした:-(
これは動作します
avconv -i 1.mp4 1.mpeg
avconv -i 2.mp4 2.mpeg
avconv -i 3.mp4 3.mpeg
cat 1.mpeg 2.mpeg 3.mpeg | avconv -f mpeg -i - -vcodec mpeg4 -strict experimental output.mp4
Avconvしかない場合は上記のように機能しますが、ffmpegには関数を追加しています...
「上記のavconvステップは不必要な追加の損失のあるエンコードステップを実行するため、低速で出力の品質が低下します。代わりにconcat demuxer(追加情報)またはconcatフィルターを使用することをお勧めしますが、avconvにはFFmpegのffmpegで利用できる機能がありません」-@ N
SEE https://trac.ffmpeg.org/wiki/Concatenate
名前付きパイプをサポートするシステムを使用している場合は、それらを使用して中間ファイルの作成を回避できます-これにより、stderr(ffmpegがすべての書き込まれたデータを送信)が/ dev/nullに送信され、コマンドラインが乱雑になりません:
mkfifo temp1 temp2
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null
ffmpeg -f mpegts -i "concat:temp1|temp2" -c copy -bsf:a aac_adtstoasc output.mp4
これは私のために働く:
avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4
再エンコードせずに、すべてのファイルを1つのmp4に連結するだけです。
これを行うには、ffmpeg
コマンドを使用しています。以下に例を示します。
ffmpeg -i concat:/dev/null|file1.ts|file2.ts -c copy -bsf:a aac_adtstoasc -y output.mp4
Distributed parallel video trascoding のこのgithubプロジェクトを見てください
エラーメッセージへの回答が得られなかった後、これらすべての同様の回答がありました。
~ avconv -i 'concat:' -c copy test.mp4
avconv version 12.3, Copyright (c) 2000-2018 the Libav developers
built on Jan 22 2019 21:47:11 with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
concat:: Protocol not found
私はいくつかのGoogleの結果を掘り下げ、バグトラッカーに行き、これらを見つけました:
ある時点で無効にされただけでなく、バージョン12で削除されたようですが、HomebrewのMac 10.13.6のビルド12.3には、入力プロトコルに「concat」がリストされており、ドキュメントにも表示されています。 1つの未解決のバグレポート。
私はこのコマンドを使用していくつかの運がありました:
cat *.VOB | avconv -i - -c copy test.mp4
私はavidemux(gtkツール)でそれをやった。ほとんどのLinuxで、WindowsおよびMacでもパッケージとして入手できます。最初のファイルを開いただけです。次に、次のものを順番に追加しました。最後に、オーディオとビデオのコピーとフォーマットmp4を使用して、連結されたビデオを保存しました。
うまくいきました!
ビデオを正常に連結するAvdshare Video Converter 7という名前のツールを見つけました。さらに、私が望むほぼすべての形式にトランスコードします。
このページでeveryソリューションを試しました...allあなたが私の答えを読んでいる場合にあなたがたぶん遭遇したのと同じエラーを私に。 「プロトコルが見つかりません」と動揺しますか?多分これもあなたのためのプログラムです。
Windowsで実行しています。
プログラムで2つのビデオを連結する手順は次のとおりです。
ビデオをプログラムにドラッグアンドドロップします
マージをクリック
微調整したいすべてのパラメーターを指定する「プロファイルの保存」を選択します
[保存]ボタンをクリックします
このメソッドは、raw * .aviファイルのみを連結するためのものです。しかし、aviファイルに参加したい人の多くはこの質問を見ることになるので、とにかくここに答えを投稿します。
cat *.avi > out_tmp.avi
avconv -i out_tmp.avi -c copy output.avi
もう一度:非圧縮* .aviファイルに対してのみ動作します。