FFmpeg指令行map參數選擇音視訊流
介紹
-
參數告訴ffmpeg要從輸入源中-map
哪個選擇/拷貝
流到輸出,可以從輸入源中選擇多個音視訊流作為輸出。stream
- 不加
參數,ffmpeg預設從輸入源中的視訊流和音頻流各選擇一個流。-map
- 輸出流/檔案的stream順序取決于在指令行中
的參數順序。-map
預設情況
預設情況下(沒有使用
-map
參數),比如:
ffmpeg -i 0001.ts -c copy -f mpegts udp://192.168.1.100&pkt_size=1316
FFmpeg會預設從所有輸入流中找到[最高品質的一個視訊輸入流]和[最高品質的一個音頻輸入流],并拷貝流輸出udp輸出流。其他流實質上會被丢棄。
如果使用map指令顯示與上面指令相同的操作,它的指令如下:
ffmpeg -i 0001.ts \
-map single_highest_quality_video_stream_from_all_inputs \
-map single_highest_quality_audio_stream_from_all_inputs \
-c copy -f mpegts "udp://192.168.1.100:1234?pkt_size=1316"
此處輸出将有兩個流,一個音頻,一個視訊。
指定輸入流中的音視訊流
例子,0001.ts是個單視訊流,多音頻流的資訊如下:
-
是視訊流Stream #0:0
-
~Stream #0:1
是音頻流Stream #0:3
-
是字幕流Stream #0:4
Input #0, mpegts, from '0001.ts':
Duration: 00:04:46.23, start: 57251.747478, bitrate: 5861 kb/s
Program 34
Metadata:
service_name : Test TV HD
service_provider: TV5
Stream #0:0[0x53d]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x53e](THA): Audio: aac_latm (HE-AACv2) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp
Stream #0:2[0x53f](QAA): Audio: aac_latm (HE-AACv2) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp
Stream #0:3[0x540](NAR): Audio: aac_latm (LC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp
Stream #0:4[0x541](tha): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
01 如要要指定取多視訊和多音頻流中的一路流,要怎麼處理呢?
如下指令:
-map 0:0 -map 0:2
選擇輸入源中
Stream #0:0
的視訊流,
Stream #0:2
的音頻流,拷貝選擇的音視訊流輸出到udp輸出流
ffmpeg -i 0001.ts -map 0:0 -map 0:2 -c copy -f mpegts "udp://192.168.1.100:1234?pkt_size=1316"
02 如要要指定取單路視訊流和多路音頻流,要怎麼處理呢?
-map 0:0 -map 0:1 -map 0:2 -map 0:3
Stream #0:0
Stream #0:0
、
Stream #0:1
和
Stream #0:3
的三路音頻流,拷貝選擇的音視訊流輸出到udp輸出流
ffmpeg -i 0001.ts -map 0:0 -map 0:1 -map 0:2 -map 0:3 \
-c copy -f mpegts "udp://192.168.1.100:1234?pkt_size=1316"
03 如要要取所有的視訊和音頻流,要怎麼處理呢?
-map 0:a -map 0:v
選擇輸入源中所有視訊流和所有的音頻,拷貝所有的音視訊流輸出到udp流中
ffmpeg -i 0001.ts -map 0:a -map 0:v -c copy -f mpegts "udp://192.168.1.100:1234?pkt_size=1316"
04 如要要取所有流(包括字幕流等),要怎麼處理呢?
-map 0
ffmpeg -i 0001.ts -map 0 -c copy -f mpegts "udp://192.168.1.100:1234?pkt_size=1316"
指定輸入流中的多音視訊流編碼格式
- 将
視訊流拷貝複制Stream #0:0
-
Stream #0:1
音頻流拷貝複制Stream #0:2
-
音頻流編碼為mp3格式(128kbps)Stream #0:2
-
字幕流拷貝複制Stream #0:4
fffmpeg -i 0001.ts -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:4 \
- c:v copy \
- c:a:0 copy \
- c:a:1 copy \
- c:a:2 libmp3lame -b:a:2 128k \
- c:s copy \
-f mpegts "udp://192.168.1.100:1234?pkt_size=1316"