FFmpeg

簡介與其他資料:
 http://www.mobile01.com/topicdetail.php?f=510&t=3734550

其他範例:
  http://www.mobile01.com/topicdetail.php?f=510&t=4487462


介紹

若要無損輸出有三種方式可以達到:
(1) 直接複製輸入串流
(2) 輸出為無壓縮格式
(3) 輸出為無損壓縮格式


串流複製

如果只是要分割檔案或是改變檔案格式,則建議直接複製輸入串流至輸出檔案即可。

命令:
ffmpeg -i INPUT -c copy OUTPUT

例如: AVI > MPEG-4 檔案格式:
ffmpeg -i input.avi -c copy output.mp4

MPEG-4 檔案格式詳細:
http://www.mobile01.com/topicdetail.php?f=510&t=4514829

若要選擇輸入視/音訊/字幕串流:
http://www.mobile01.com/topicdetail.php?f=510&t=4200388


無壓縮格式

無壓縮格式 通常用來作為暫存檔案,
例如當需要使用的影音工具不支援來源檔的視音訊格式時,
或是當你用 FFmpeg 處理後要輸出給其他影音工具進行其他處理時,
則效率比較高的做法是輸出為無壓縮格式 (例如 RGB 或 PCM) 給其他工具讀取。

無壓縮視訊

要將輸入視訊串流轉成無壓縮格式可以使用 "-c:v rawvideo",
且輸出檔案推薦使用 AVI 或是 MKV 格式。

命令:
ffmpeg -i INPUT -an -c:v rawvideo OUTPUT

若是直接輸出無封裝的視訊串流 可以使用 "-f rawvideo",
(當設定輸出檔案格式為 "rawvideo" 時預設編解碼器為 "rawvideo"。
"-c:v rawvideo" 這時可以被省略,只需 "-f rawvideo")

無壓縮音訊

要將輸入音訊串流轉成無壓縮格式,
直接指定輸出檔案格式為 WAV 且不指定音訊編解碼器,
輸入音訊串流將被轉為無壓縮音訊格式 (PCM)。

命令:
ffmpeg -i INPUT -vn -f wav OUTPUT

若輸出檔案格式不是 WAV,則必須手動指定音訊編解碼器,例如 pcm_s16le 或 pcm_s32le...
ffmpeg -i INPUT -c:v rawvideo -c:a pcm_s16le output.avi


無損壓縮格式

無損壓縮格式的使用目的大多與無壓縮格式相同,
如果儲存空間不足的情況下可以使用無損壓縮格式作為暫存檔案格式。
但(有/無損)視訊壓縮格式雖然節省儲存空間,但非常的消耗 CPU 與 RAM 資源,
會浪費比較多時間,若用它來作為暫存檔案是效率比較差的做法。

無損壓縮視訊

若需要無損壓縮視訊推薦使用 H.264 / AVC 的無損模式,
你可使用使用 FFmpeg 的 libx264 或是 libx264rgb 編碼器,
並搭配 "-qp 0" 來輸出無損 H.264 視訊。

命令:
ffmpeg -i INPUT -an -c:v libx264 -qp:v 0 -preset:v ultrafast OUTPUT

如果只是要輸出一個暫存檔給其他工具編輯,
則建議使用 "-preset:v ultrafast" 來減少 CPU 負擔,
雖然會輸出更巨大的檔案,但可以節省許多時間。

libx264, libx264rgb:
https://ffmpeg.org/ffmpeg-all.html#libx264_002c-libx264rgb

無損壓縮音訊

若需要無損壓縮視訊推薦使用 FLAC 格式。

命令:
ffmpeg -i INPUT -vn -c:a flac OUTPUT

flac:
https://ffmpeg.org/ffmpeg-all.html#flac
文章關鍵字
你好,感謝大大在另一帖解惑我的問題,另想請教一個關於複製串流的問題,個人試作N多嘗試,仍不得解,只好繼續厚顏請教。。。。

=========以下前言有點多,望海涵=================

個人有一些ffmpeg (h264/avc)TS <--> MP4 互轉的經驗

主要用的command為:

[iframe]
ffmpeg.exe -i "%~1" -codec copy -bsf h264_mp4toannexb "%~dpn1.ts"
ffmpeg -i "%~1" -c copy -bsf:a aac_adtstoasc -movflags +faststart "%~dpn1.mp4"
[/iframe]

但日前想對 金馬52的TS檔,用SMMVS作無損剪輯。。。TS、MP4都無法載入。。。
後來發現音源流(01)(02)都是AAC-Latm(HE-AAC)
於是個人思路是將它轉為libfdk_aac 的mp4

後來轉換的mp4(一開始沒發現fps 29變59的問題),
接著用SMMVS輸出CUT,(最新版)potplayer播放就會產生雪花綠屏
(其實把potplayer內建ffmpeg改為系統內置MFT Decoder 或用其它播放器也沒問題)

ps.其實個人 codec環境 一直唯持得很干淨,之前因為裝k-lite mega codec,導致會聲會影輸出影像有問題,後來重裝系統就唯持干淨單純環境

===========================

最後回頭作了N多的轉換實驗,始終無法讓TS輸出相同的fps 29的MP4
包含用tsmuxeRGUI tsREmux SmartCutter的 remux 或fix 重新remux ts檔
也用過 -r 30000/1001 ,後來曾成功看到fps29 ,但播放卻是0.5倍速慢動作播放

最后採用極端手段,用Vidcoder直播重壓CUT.mp4 或ts檔,其實能解決
不過基於求知與學習的欲望,還是想請教大大,並用無損的方式作CUT
============================
所以想請教你 如何用ffmpeg 將TS 直接轉換為mp4(0:1:a aac-latm 轉換為 acc) ???


附上參考檔案TS 截取一小段(用SmartCutter(怕fix參數影響ts檔內容)及Avidemux剪輯)
1.SmartCutter.TS
2.Avidemux.TS
3.自已轉換的mp4
4.再用SMMVS作CUT輸出的mp4
bitsend.jp下載


kingdragon wrote:
FFmpeg簡介與...(恕刪)
笑看風雲 wrote:
最後回頭作了N多的轉換實驗,始終無法讓TS輸出相同的fps 29的MP4

因為你這個影片的掃描模式是 Interlaced (交錯)
兩個 場 (Field) 才能組出一張完整的 畫格 (Frame)
由於你這部影片每秒有 59.94 Fields

當你使用 FFmpeg 將此 TS 檔重新封裝為 MP4 後:
Frame rate mode                : Variable
Frame rate : 59.940 fps
Original frame rate : 29.970 fps
Minimum frame rate : 59.920 fps
Maximum frame rate : 90 000.000 fps

從媒體訊息來看 MP4 的 FPS 是正常的
會有兩種 frame rate (29.97fps / 59.94 fps) 只是因為計算方式不同,但實際上內容是一樣的
如果兩場輸出為一個畫格,則播放的 frame rate就是 29.97fps
如果每場單獨輸出為一個畫格,則播放的 frame rate 就是 59.94fps

所以你不應該改變 MP4 的 frame rate 為 29.97fps
因為這樣會得到錯誤的 frame rate (14.985fps / 29.97 fps)

你可以發現你使用 potplayer 播放 TS 或 MP4時輸出 frame rate 都是 59.94fps
這是因為它使用上述第二種方式來處理畫格輸出

笑看風雲 wrote:
所以想請教你 如何用ffmpeg 將TS 直接轉換為mp4(0:1:a aac-latm 轉換為 acc) ???

ffmpeg -i input.ts -c copy -c:a libfdk_aac -bsf:a aac_adtstoasc -movflags +faststart output.mp4



文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!