インターネットの速度が遅すぎて高解像度を視聴できないため、大量のストリームをダウンロードしています。ストリームをダウンロードするときに、TS ファイルを指す .m3u8 ファイルを見つけます。次に、次のコマンドを使用します。
ffmpeg -i stream.m3u8 vid.mp4
これは機能します。ただし、すでに正しい形式であるにもかかわらず、基本的にすべてを再エンコードするため、非常に長い時間がかかります。再エンコードを回避するには、次のコマンドを使用します。
ffmpeg -i stream.m3u8 -vcodec copy -acodec copy vid.mp4
最初から最後まで中断せずに再生する場合は、これで問題ありません。しかし、前後にスキップすると、vlc で画像の作成に問題が発生します。数秒間、正しく表示できません。これは非常に煩わしいです。
私の質問:完全な再エンコードを行わずに、どの時点でも適切な VLC レンダリングが可能なビデオを作成するにはどうすればよいでしょうか?
答え1
ffmpegにファイルを1つのストリームに結合するのではなく、mp4にエンコードするように要求しています。連結するに変換しtemp.ts
、それを を.mp4
使用してに変換します-codec copy
。
また、 2 番目のステップで にadts
変換する必要があると思います。aac
-bsf:a aac_adtstoasc
答え2
再エンコードしないと、ビデオのキーフレームなどを変更できず、説明した動作が発生する可能性があります。
ただし、次のような方法を試すこともできます:
ffmpeg -i stream.m3u8 -codec:v "libx264" "-preset" "ultrafast" output.mp4
速度が上がると品質は低下するので、「速い」の方が良いかもしれないことに留意してください...
答え3
ffmpegを使った私のバージョンを見る mp4ジョイナー