Curlを使用してビデオストリームをダウンロードすると、それぞれが約1MBのサイズの約400個の* .tsファイルになりました。それらは、video1.ts、video2.ts、... video400.tsの順に番号が付けられています。ここで、それらを1つのファイルに、明らかに正しい順序で連結する必要があります(したがって、video10.tsの後にvideo110.tsではなくvideo11.tsを続ける必要があります)。
「foriin * .ts; do ....」のようなものを考え出そうとしましたが、理解できません。また、ffmepgとavconvは私には複雑すぎます。
これらの400個のファイルを正しいファイルに新しいファイルに結合する方法を誰が知っていますか?どうも!
filenames="`ls -rt1 $input | tr '\n' '|' | sed '$ s/.$//'`"
ffmpeg -i "concat:$filenames" -c copy out.ts
、
どこ $input
は、ファイル名またはエスケープされた正規表現(\ *。tsなど)です。
これは古い質問ですが、その答えが他の人に付加価値をもたらすことを願っています。
この参照 に基づいて、次のスクリプトはffmpeg 1.1
以降を想定してジョブを実行します。
#!/bin/bash
for i in `seq 0 $totalNumberOfTsFiles`; do echo file "'${i}.ts'" >> Input.txt ; done
/home/hq6/bin/ffmpeg-2.3.3/ffmpeg -f concat -i Input.txt -c copy output.ts
トリックはどのようなものですか?
for i in `seq 1 400`; do cat "video$i.ts" >> newvideo.ts; done
しかし、現在、オーディオは約0.5秒同期しておらず、数秒ごとに約0.5秒の無音があります(おそらくフラグメントが接着されている場合)。
Ffmpegを実行する前にTSファイルを連結するように読者を誤解させるこの質問に対するすべての答えは正しくありません。 mp4ストリームのアセンブル中にオーディオとビデオの同期が崩れないようにするには、文書化が不十分ですが、ffmpegの重要な「-fconcat」機能を使用する必要があります。
delimiterBeforeFileNumber="-"
ls |egrep '[.]ts$' \
|sort "-t$delimiterBeforeFileNumber" -k2,2n \
|sed -r "s/(.*)/file '\1'/" >ts.files.txt
ffmpeg -f concat -i ts.files.txt -c copy tsw.014.ts.mp4
コードの2行の準備行は、この行形式のTSファイルのリストを含むファイルを作成するだけです。これはプレイリストのようにffmpegによって使用されます。
file 'seg-37-a.ts'
次のコマンドを試してください。
cat video?.ts video??.ts video???.ts > out.ts