[FFmpeg] 管道 (Pipe) 輸入/出

FFmpeg

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

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


介紹

當你需要使用兩種或多種工具來處理影音時,例如 qaac 不支援 MKV 輸入,可以先使用 FFmpeg 轉換輸出為 WAV 檔案,然後將此輸出 WAV 檔案給 qaac 讀取來重新編碼輸出。但這個方法需要建立一個 WAV 暫存檔,如果你不想要建立暫存檔可以使用管道 (Pipe) 將 FFmpeg 輸出的 WAV 傳給 qaac 讀取。這方法既節省時間又節省儲存空間。


管道輸出

如果要使用 FFmpeg 輸出視音訊串流至管道 (Pipe),
你必須使用 -f 選項來指定 Muxer / 輸出檔案格式,輸出使用 '-'。

CMD:
ffmpeg -i INPUT -f FORMAT - | ......

範例:

FFmpeg → WAV:
ffmpeg -i input.m2ts -vn -async 1 -f wav - | qaac -o output.m4a -

FFmpeg → YUV4MPEG:
ffmpeg -i input.m2ts -an -f yuv4mpegpipe - | x265 -o output.mkv - --y4m

FFmpeg → MKV:
ffmpeg -i input.m2ts -c:v rawvideo -c:a pcm_s16le -f matroska - | ffmpeg -i - output.mp4

如果輸出格式是 Raw video,必須在讀取管道端的工具手動指定輸入格式、解析度、畫格速率。如果輸出格式是 PCM audio,則必須在讀取管道端的工具手動指定輸入格式、聲道數、頻率。


管道輸入

如果要使用 FFmpeg 從管道 (Pipe) 讀取視音訊串流,
你必須使用 "-i -" 選項來設定管道輸入。

CMD:
...... | ffmpeg -i - ......

範例:

WAV → FFmpeg:
ffmpeg -i input.m2ts -vn -async 1 -f wav - | ffmpeg -i - output.flac

YUV4MPEG → FFmpeg:
ffmpeg -i input.m2ts -an -f yuv4mpegpipe - | ffmpeg -i - output.mp4

MKV → FFmpeg:
ffmpeg -i input.m2ts -c:v rawvideo -c:a pcm_s16le -f matroska - | ffmpeg -i - output.mp4

如果輸入格式是 Raw video,必須在 FFmpeg 手動指定輸入格式 (-f)、解析度(-s)、畫格速率(-r)。如果輸出格式是 PCM audio,則必須在 FFmpeg 手動指定輸入格式 (-f)、聲道數(-ac)、頻率(-ar)。注意,輸入選項必須位於 -i 選項之前。

CMD:

PCM audio:
...... | ffmpeg -f FORMAT -ac CHANNELS -ar RATE -i - ......

RAW video:
...... | ffmpeg -f FORMAT -r FRAMERATE -s SIZE -i - ......

範例:

S16LE (PCM) → FFmpeg:
ffmpeg -i input.m2ts -vn -async 1 -ac 2 -ar 48000 -f s16le - | ffmpeg -f s16le -ac 2 -ar 48000 -i - output.flac

Raw video → FFmpeg:
ffmpeg -i input.m2ts -an -vsync cfr -r 24000/1001 -s 1280x720 -c:v rawvideo -f rawvideo - | ffmpeg -f rawvideo -r 24000/1001 -s 1280x720 -i - output.mp4

2015-08-11 15:40 發佈
想用findstr篩選我想要的資訊

嘗試:
ffmpeg -hide_banner -i 輸入檔案 | findstr "Stream" -

發覺無效....

也想作:
ffmpeg -hide_banner -i 輸入檔案 >> a.txt

但都無法達成,不得其法,故請教之 ^^


笑看風雲 wrote:
想用 findstr...(恕刪)


使用 findstr 找字串時,有時我會加上 /i,主要用意是不區分大小寫

有時,不會用單純的 findstr /i "my string"
因為我們不是要找 "my" 或 "string",而是 "my string"
所以要改用 findstr /i /c:"my string",這才會是真的找出 "my string"

笑看風雲 wrote:
想用findstr篩選我想要的資訊

嘗試:
ffmpeg -hide_banner -i 輸入檔案 | findstr "Stream" -

發覺無效....

也想作:
ffmpeg -hide_banner -i 輸入檔案 >> a.txt

寫成批次檔很正常.


☆ 私人訊息直接刪除不再回覆 ☆ 願望 : bovuhPPjMnEfkyhggnsJdABaLFPuhXT4

plusv wrote:
寫成批次檔很正常....(恕刪)



可否公佈 FFMpeg_ViewInfo_AVI 批次檔內容

這是個人想要的結果


個人用最新版的ffmpeg
用 | (pine) 一直無法有效輸出成功 ?
可否明示
笑看風雲 wrote:
想用findstr...(恕刪)

要抓影片訊息建議用 ffprobe https://ffmpeg.org/ffprobe-all.html
ffprobe -v quiet -show_format -show_streams input.mkv

而且你還可以指定輸出訊息格式 例如 JSON
ffprobe -v quiet -print_format json -show_format -show_streams input.mkv

抓輸出訊息要注意
影片訊息是標準輸出 (stdout)
log 則是標準錯誤輸出 (stderr)

預設:
[SECTION]
key1=val1
...
keyN=valN
[/SECTION]

JSON:
https://ffmpeg.org/ffprobe-all.html#json

kingdragon wrote:
要抓影片訊息建議用...(恕刪)


感謝大大回覆,謝謝說明ffprobe的用法
感覺內容就是mediainfo的命令版
但要透過批次檔,篩選出 "個人想要的Stream所有內容"
個人能力有限,無法寫出那樣的batch

個人是不知道上面另一位大大plusv的批次檔是否寫的很複雜。。。
但plusv所帶出的圖。。。剛好是個人想要的。。。

一般來說個人都是用 右鍵 秀 mediainfo 視窗
一般常看的內容就是那幾個

但ffmpeg 好像沒有stdout 可以用|(pine)處理 (或者是個人功力不夠 XDD)
所以才特來請教此區的大大們 ^^
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?