1つのindex.m3u8ファイルで記述されたtsセグメントの束を持っています
index.m3u8
segment1_0_av.ts
segment2_0_av.ts
segment3_0_av.ts
segment4_0_av.ts
segment5_0_av.ts
どれも同じようにエンコードされていると思いますが、ffprobeでは以下のようになっています
Input #0, mpegts, from 'segment1_0_av.ts':
Duration: 00:00:10.00, start: 0.100511, bitrate: 1251 kb/s
Program 1
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 12.50 fps, 25 tbr, 90k tbn, 25 tbc
Stream #0:1[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 105 kb/s
Stream #0:2[0x102]: Unknown: none ([21][0][0][0] / 0x0015)
それらを一つのmp4コンテナにまとめたいと思います。しかし、次のようなコマンドを試してみると
ffmpeg -f concat -i filelist.txt -c copy output.mp4
index.m3u8ファイルからfilelist.txtを生成すると、いろいろなファイルが読めないと文句を言います。しかし、tsファイル自体は変換しても問題ないようです。ffmpegをちゃんと使っていないような気がします
index.m3u8で記述されたtsファイルをコピーコーデックを使用して1つのmp4コンテナに結合するためにffmpegを使用するにはどうすればいいですか?
56 Ana 2013-12-25
なぜ ffmpeg がエラーを出しているのかわかりません。しかし、tsは単純に連結できる数少ないフォーマットの一つです。そして、あなたが一度、単一のtsを持っているならば、mp4に変換します
Under windows:
copy /b segment1_0_av.ts+segment2_0_av.ts+segment3_0_av.ts all.ts
ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4
GNU/Linuxでは、bashを使用します
cat segment1_0_av.ts segment2_0_av.ts segment3_0_av.ts > all.ts
ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4
67 szatmary 2013-12-25
szatmaryの現在のトップアンサーのようなファイルを結合するためにコピーまたは猫を使用すると、限界をはるかに超えて再生し、再生の問題と一緒にシークすることはできませんファイルを残すかもしれません
代わりに、https://trac.ffmpeg.org/wiki/Concatenate で指示されているように、これらのファイルを適切に結合するには ffmpeg を使用してください。(https://github.com/adaptlearning/adapt_authoring/wiki/Installing-FFmpeg で指示されているように ffmpeg をインストールしてください。)
私の最初のリンクを読むにはあまりにも怠け者なので、基本的には、結合したいすべてのファイルをリストアップした.txtファイルを、結合を行っているフォルダに作成する必要があります
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
ここでは、例えばコマンドラインでWindowsを使用している場合にテキストファイルを作成する方法についての私の最初のリンクからのコピーペーストですが、明らかに手動で作成することもできますし、あなたが望む方法で作成することもできます
(for %i in (*.ts) do @echo file '%i') > mylist.txt
.txtファイルが正しくフォーマットされているかどうかをダブルチェックしてください
この後、コマンドラインで実行します
ffmpeg -f concat -i mylist.txt -c copy all.ts
ここで、’mylist.txt’は先ほど作成した.txtファイルです
出来上がったファイルが正しく動画を再生しているかどうかを確認します。ここからは、お好みであれば、通常通りmp4に変換することができます
ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4
35 Juan Aquino 2017-01-01
2017 answer
しかし、
...
のようなコマンドを試してみると、いろいろなファイルが読めないと文句を言ってきます
ある動画でffmpeg -i some.ts -c copy some.mp4
を実行すると、このようなエラーメッセージが表示されます
Malformed AAC bitstream detected: use the audio bitstream filter
'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)
av_interleaved_write_frame(): Operation not permitted
驚くことではありませんが、ffmpeg -i some.ts -c copy -bsf:a aac_adtstoasc some.mp4
を実行すると修正されます
8 7vujy0f0hy 2017-03-25
全部まとめて
Juan Aquinoさんの答えを使って(そして最初のコマンドをBashと互換性があるように修正し、ファイルの自然な順序を使って)、7vujy0f0hyさんの答えを加えて、LinuxのBashシェルのための簡単な作業スクリプトができました
#!/bin/bash
for i in `ls *.ts | sort -V`; do echo "file $i"; done >> mylist.txt
ffmpeg -f concat -i mylist.txt -c copy -bsf:a aac_adtstoasc video.mp4
8 Francesco Galgani 2017-11-11
m3u8プレイリストから複数の動画ファイルをコンカッションするのが正しい方法です
ffmpeg -i "index.m3u8" -codec copy output.mp4
- m3u8のプレイリストは、ウェブ上またはディレクトリ内のローカルにあることができます
- プレイリストからの相対的なファイルパスのリストを含みます
-codec copy
でエンコードを回避する- コンテナの種類の問題:
*.mp4
は問題ありませんが、Webからプレイリストを取得したときのmuxが少し遅いように感じます*.mkv
か*.ts
が一番効きました
7 Vlastimil Ovčáčík 2018-11-14
このように簡単に連結することができます(bashで)
for f in ./{0..<number>}.ts; do cat $f >> out.ts; done
<number>
を一番高い数字に置き換えてください(当たり前ですが)。ffmpeg を使ったバリアントは正しく動作しませんでした。出力されたビデオファイルは奇妙なほど吃ります
順番を間違えないようにforループを使っています。たぶん必要ないと思います。もしかしたら、出力をffmpegにパイプして、その場でmp4に変換することも可能かもしれません
2 ragnarsson 2018-01-05
これらのtsファイルをffmpegにパイプしてmp4ファイルを出力することができます
cat *.ts | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
または、ファイル名に順序がない場合は、そのファイル名をクリックしてください
grep .*.ts index.m3u8 | xargs cat | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
1 Kris Roofe 2019-08-06
ffmpeg を実行する前に TS ファイルを連結するように読者を誤解させるこの質問に対する一般的な回答はすべて間違っています。mp4ストリームの組み立て中にオーディオとビデオが同期しなくならないようにするには、文書化されていないが重要なffmpegの”-f concat “機能を使用する必要があります
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ファイルのリストを含むファイルを作成するだけです
file 'seg-37-a.ts'
0 Douglas Daseeco 2018-11-23