nil*_*lli 10 command-line ffmpeg video-subtitles
我正在尝试从 Matroska 文件重新编码视频流以节省空间,同时使用 ffmpeg 保持所有字幕原样。我想编写一个通用命令,无需指定确切的流编号即可工作。现在我不知道如何让 ffmpeg 选择其默认视频流和默认音频流,然后选择所有字幕。
我正在使用的当前输入文件具有这些流,但其他文件将具有不同的流。
[lavf] stream 0: video (mpeg2video), -vid 0
[lavf] stream 1: audio (ac3), -aid 0, -alang eng, Surround 5.1
[lavf] stream 2: audio (ac3), -aid 1, -alang fre, Surround 5.1
[lavf] stream 3: audio (ac3), -aid 2, -alang ita, Surround 5.1
[lavf] stream 4: audio (ac3), -aid 3, -alang spa, Surround 5.1
[lavf] stream 5: audio (ac3), -aid 4, -alang eng, Stereo
[lavf] stream 6: subtitle (dvdsub), -sid 0, -slang eng
[lavf] stream 7: subtitle (dvdsub), -sid 1, -slang fre
[lavf] stream 8: subtitle (dvdsub), -sid 2, -slang ita
[lavf] stream 9: subtitle (dvdsub), -sid 3, -slang spa
[lavf] stream 10: subtitle (dvdsub), -sid 4, -slang ara
[lavf] stream 11: subtitle (dvdsub), -sid 5, -slang dan
[lavf] stream 12: subtitle (dvdsub), -sid 6, -slang dut
[lavf] stream 13: subtitle (dvdsub), -sid 7, -slang fin
[lavf] stream 14: subtitle (dvdsub), -sid 8, -slang ice
[lavf] stream 15: subtitle (dvdsub), -sid 9, -slang nor
[lavf] stream 16: subtitle (dvdsub), -sid 10, -slang por
[lavf] stream 17: subtitle (dvdsub), -sid 11, -slang swe
[lavf] stream 18: subtitle (dvdsub), -sid 12, -slang fre
[lavf] stream 19: subtitle (dvdsub), -sid 13, -slang ita
[lavf] stream 20: subtitle (dvdsub), -sid 14, -slang spa
Run Code Online (Sandbox Code Playgroud)
我试过的命令:
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska OUT.mkv
结果:一视频流,一音频流,无字幕流。
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska -c:s copy OUT.mkv
结果:一个视频流,一个音频流,一个字幕流。
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska -map 0 OUT.mkv
结果:所有视频,所有音频,所有字幕。
ffmpeg -i IN.mkv -c:v libx264 -threads 4 -speed 1 -f matroska -c:s copy -map 0:s OUT.mkv
结果:没有视频,没有音频,所有字幕。
据我从手册中可以看出,-c:s copy应该复制所有流,而不仅仅是默认流,但它不会。也许这是一个错误?
澄清一下,我所追求的是结果:一个视频,一个音频和所有字幕。
llo*_*gan 26
所述流选择 默认行为仅选择每个类型的流中的一个流,所以与多个音频流输入将创建一个音频流的输出。要禁用此行为并手动选择所需的流,请使用该-map选项。
这些示例用于-c copy将复制(重新复用)从输入流式传输到输出。不会发生重新编码。
ffmpeg -i input -map 0 -c copy output
Run Code Online (Sandbox Code Playgroud)
ffmpeg -i input -map 0:v:0 -map 0:a:1 -map 0:s -c copy output
Run Code Online (Sandbox Code Playgroud)
本示例使用负映射来排除字幕。
ffmpeg -i input -map 0:v:2 -map 0:a -map -0:s -c copy output
Run Code Online (Sandbox Code Playgroud)
输入 0 中的所有视频,输入 1 中的所有音频:
ffmpeg -i input0 -i input1 -map 0:v -map 1:a -c copy output
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23698 次 |
| 最近记录: |