2024/10/12

FFmpeg:TS影片轉MP4 時的錯誤與解決方法

本文已發佈逾2 年,除非文中有標注更新,否則內含的資訊有可能不合時宜,敬請注意!

流傳的TS格式的影片雖然都可能是通過H.264和AAC對影像和聲音壓縮,一般來說在正常播放器播放沒有大問題。然而,著名的VLC不知何故是不能快進(Fast forward)TS檔的,所以還是FFmpeg轉成通用的MP4比較方便。

影像是H.264,在-c:v可以直接copy解決。

但音頻的AAC,用-c:a copy就會出現錯誤:

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

在大神林立、牆裡面的CSDN上找到解說:「音訊資料是AAC流,在解碼時需要ADTS(Audio Data Transport Stream)頭部,不管是容器封裝還是串流媒體,沒有這個,一般都是不能播放的。」

簡單說即是轉碼時出錯其實是FFmpeg根本讀不了那條音頻,複製個屁。

所以就要在直接複製copy後面這個-bsf:a aac_adtstoasc,先讓FFmpeg去讀取那個音頻才複製。

正確的指令該是這樣:

ffmpeg -i Video-644.ts -c:v copy -c:a copy -bsf:a aac_adtstoasc Video-644.mp4

※解決方法出處:https://blog.csdn.net/qq_33349051/article/details/104061630