web-dev-qa-db-ja.com

数百のtsファイルを1つのtsファイルにマージ/結合/連結します

Curlを使用してビデオストリームをダウンロードすると、それぞれが約1MBのサイズの約400個の* .tsファイルになりました。それらは、video1.ts、video2.ts、... video400.tsの順に番号が付けられています。ここで、それらを1つのファイルに、明らかに正しい順序で連結する必要があります(したがって、video10.tsの後にvideo110.tsではなくvideo11.tsを続ける必要があります)。

「foriin * .ts; do ....」のようなものを考え出そうとしましたが、理解できません。また、ffmepgとavconvは私には複雑すぎます。

これらの400個のファイルを正しいファイルに新しいファイルに結合する方法を誰が知っていますか?どうも!

4
user140222

filenames="`ls -rt1 $input | tr '\n' '|' | sed '$ s/.$//'`"

ffmpeg -i "concat:$filenames" -c copy out.ts

どこ $inputは、ファイル名またはエスケープされた正規表現(\ *。tsなど)です。

2
Geremia

これは古い質問ですが、その答えが他の人に付加価値をもたらすことを願っています。

この参照 に基づいて、次のスクリプトは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
1
merlin2011

トリックはどのようなものですか?

for i in `seq 1 400`; do cat "video$i.ts" >> newvideo.ts; done

しかし、現在、オーディオは約0.5秒同期しておらず、数秒ごとに約0.5秒の無音があります(おそらくフラグメントが接着されている場合)。

1
user140222

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'
1
Douglas Daseeco

最善の解決策:

ダウンロード TSSplitter 、[参加]タブをクリックして、すべてのファイルをウィンドウにドラッグします。

enter image description here

0
T.Todua

次のコマンドを試してください。

cat video?.ts video??.ts video???.ts  > out.ts
0
Roadowl