FFmpeg:按语言选择音频流

FFmpeg:按语言选择音频流,ffmpeg,Ffmpeg,我正在尝试对电视流进行转码,但只包括英语音频流。我曾尝试使用-map 0:m:language:eng流说明符,但我得到: "Automatic encoder selection failed for output stream #0:3. Default encoder for format mpegts (codec none) is probably disabled. Please choose an encoder manually. Error selecting an encod

我正在尝试对电视流进行转码,但只包括英语音频流。我曾尝试使用
-map 0:m:language:eng
流说明符,但我得到:

"Automatic encoder selection failed for output stream #0:3. Default encoder for format mpegts (codec none) is probably disabled. Please choose an encoder manually.
Error selecting an encoder for stream 0:3"
这是尽管包括一个编码器。我尝试过这个主题的各种变化,但都没有成功

一次尝试的完整输出如下所示:

ffmpeg -i http://192.168.1.74:8001/1:0:1:189E:7FD:2:11A0000:0:0:0: -ignore_unknown -map 0:a -map 0:m:language:eng -map 0:v -acodec aac -vcodec libx264 -b:v 1100000 -t 00:00:30 "somethin.ts" 2>output.txt

    Consider increasing the value for the 'analyzeduration' and 'probesize' options
[mpegts @ 03db7b60] Could not find codec parameters for stream 17 (Unknown: none ([11][0][0][0] / 0x000B)): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
[mpegts @ 03db7b60] Could not find codec parameters for stream 18 (Unknown: none ([11][0][0][0] / 0x000B)): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mpegts, from 'http://192.168.1.74:8001/1:0:1:189E:7FD:2:11A0000:0:0:0:':
  Duration: N/A, start: 23690.732933, bitrate: N/A
  Program 6321 
  Program 6322 
  Program 6338 
  Program 6301 
  Program 6302 
    Stream #0:0[0x13ec]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x13ee](NAR): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 224 kb/s
    Stream #0:2[0x13ed](eng): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 224 kb/s
    Stream #0:3[0x13ef](eng,eng): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
    Stream #0:4[0x13f0](eng): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:5[0xf04]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:6[0xf03]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:7[0xf02]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:8[0xf01]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:9[0xf00]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:10[0x92a]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:11[0x913]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:12[0x912]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:13[0x911]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:14[0x919]: Unknown: none ([5][0][0][0] / 0x0005)
    Stream #0:15[0xf09]: Unknown: none ([11][0][0][0] / 0x000B)
    Stream #0:16[0xf08]: Unknown: none ([11][0][0][0] / 0x000B)
    Stream #0:17[0xf07]: Unknown: none ([11][0][0][0] / 0x000B)
    Stream #0:18[0xf06]: Unknown: none ([11][0][0][0] / 0x000B)
  Program 6318 
  Program 6390 
  Program 6391 
  Program 6351 
  Program 6361 
  Program 6306 
  Program 6341 
Automatic encoder selection failed for output stream #0:3. Default encoder for format mpegts (codec none) is probably disabled. Please choose an encoder manually.
Error selecting an encoder for stream 0:3
有没有关于如何做到这一点的想法。我不能按数字指定流,因为我想将其用于许多电视流,而且顺序往往不同


谢谢

输出流
0:3
是一个基于图像的字幕流。由于您尚未为字幕指定编码器,ffmpeg正在尝试选择一个,但失败了,因为它没有基于图像的字幕编码器。您可以复制或删除流

ffmpeg -i http://192.168.1.74:8001/1:0:1:189E:7FD:2:11A0000:0:0:0: -ignore_unknown -c copy -map 0:a -map 0:m:language:eng -map 0:v -acodec aac -vcodec libx264 -b:v 1100000 -t 00:00:30 "somethin.ts" 2>output.txt

当然,您的主要目标是仅按语言映射音频流。您的命令将映射视频两次,因为它被标记为英语

为了避免这种情况,可以使用两个ffmpeg命令:

ffmpeg -i http://192.168.1.74:8001/1:0:1:189E:7FD:2:11A0000:0:0:0: -ignore_unknown -c copy -map 0:v:0 -map 0:m:language:eng -f mpegts - | ffmpeg -f mpegts -i - -map 0:v:0 -map 0:a:0 -c:a aac -c:v libx264 -b:v 1.1M out.ts

输出流
0:3
是基于图像的字幕流。由于您尚未为字幕指定编码器,ffmpeg正在尝试选择一个,但失败了,因为它没有基于图像的字幕编码器。您可以复制或删除流

ffmpeg -i http://192.168.1.74:8001/1:0:1:189E:7FD:2:11A0000:0:0:0: -ignore_unknown -c copy -map 0:a -map 0:m:language:eng -map 0:v -acodec aac -vcodec libx264 -b:v 1100000 -t 00:00:30 "somethin.ts" 2>output.txt

当然,您的主要目标是仅按语言映射音频流。您的命令将映射视频两次,因为它被标记为英语

为了避免这种情况,可以使用两个ffmpeg命令:

ffmpeg -i http://192.168.1.74:8001/1:0:1:189E:7FD:2:11A0000:0:0:0: -ignore_unknown -c copy -map 0:v:0 -map 0:m:language:eng -f mpegts - | ffmpeg -f mpegts -i - -map 0:v:0 -map 0:a:0 -c:a aac -c:v libx264 -b:v 1.1M out.ts

感谢第二个建议非常有效,我将其简化为一个ffmpeg命令:*ffmpeg-I:-ignore_unknown-c copy-sn-map 0:v:0-map 0:m:language:eng-acodec aac-vcodec libx264-f mpegts-t 00:01:00-b:v 1.1M output.ts这将复制视频流(产量几乎翻了一番)如果您的输入视频被标记为
eng
。在我尝试过的示例中,情况并非如此,但我会记住这一点。我认为视频没有被常规标记为eng,尽管我不完全确定流标记,但我是否正确地假设该标记只是ffmpeg在运行时列出流时得到的文本感谢第二个建议非常有效,我将其简化为一个ffmpeg命令:*ffmpeg-I:-ignore_unknown-c copy-sn-map 0:v:0-map 0:m:language:eng-acodec aac-vcodec libx264-f mpegts-t 00:01:00-b:v 1.1M output.ts这将复制视频流(产量几乎翻了一番)如果您的输入视频被标记为
eng
。在我尝试过的示例中,情况并非如此,但感谢您,我会记住这一点。我认为视频没有被常规标记为eng,尽管我不能完全确定流标记,但我是否正确地假设标记只是ffmpeg运行时列出流时得到的文本