我有一个从直播电视录制的 mpeg 文件,其中包含视频以及多个音频和字幕流。我的最终目标是能够创建较小的视频文件,因为 mpeg 文件大小为数 GB。我在这条道路上的第一步只是能够选择视频、音频和字幕流中的每一个并将它们复制到 mkv 文件,丢弃我不感兴趣的流。(我选择 mkv 因为它允许存储dvdsub 字幕流,而其他容器格式则不然。)
我遇到的问题是,当我播放输出视频时,dvdsub 字幕显得非常小,当我研究这个问题时,我发现 ffmpeg 不会自动缩放字幕以匹配源视频:https://trac.ffmpeg.org/ticket/4744 https://trac.ffmpeg.org/ticket/4744
我尝试过使用scale2ref
过滤器,但我不理解文档,并且他们给出的示例对我来说毫无意义(请参阅下面的示例)。
我有一个命令选择三个流并将 1 分钟复制到输出,如下所示:
ffmpeg -ss 00:28:00.200 -i Hillary-2016-08-21.mpg -t 00:01:00.000 -map 0:0 -c:v copy -map 0:3 -c:a copy -map 0:6 -c:s dvdsub cut.mkv
这是输出:
Input #0, mpegts, from 'Hillary-2016-08-21.mpg':
Duration: 01:30:00.06, start: 20852.199389, bitrate: 6813 kb/s
Program 1
Stream #0:0[0xfa]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x12c](eng): Audio: aac_latm (HE-AAC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp
Stream #0:2[0x131](ita): Audio: aac_latm (HE-AAC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp (visual impaired)
Stream #0:3[0x191](eng): Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:4[0x3ea]: Unknown: none ([11][0][0][0] / 0x000B)
Stream #0:5[0x3ec]: Unknown: none ([11][0][0][0] / 0x000B)
Stream #0:6[0x3fc](eng): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)
Stream #0:7[0x1f40]: Unknown: none ([5][0][0][0] / 0x0005)
File 'cut.mkv' already exists. Overwrite ? [y/N] y
Output #0, matroska, to 'cut.mkv':
Metadata:
encoder : Lavf57.56.100
Stream #0:0: Video: h264 (Main) (H264 / 0x34363248), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 50 tbr, 1k tbn, 90k tbc
Stream #0:1(eng): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1(side), 384 kb/s
Stream #0:2(eng): Subtitle: dvd_subtitle (dvdsub) (hearing impaired)
Metadata:
encoder : Lavc57.64.101 dvdsub
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:3 -> #0:1 (copy)
Stream #0:6 -> #0:2 (dvb_subtitle (dvbsub) -> dvd_subtitle (dvdsub))
Press [q] to stop, [?] for help
frame= 2956 fps=0.0 q=-1.0 Lsize= 39612kB time=00:00:59.99 bitrate=5408.7kbits/s speed= 216x
video:36702kB audio:2896kB subtitle:23kB other streams:0kB global headers:0kB muxing overhead: unknown
的文档scale2ref
给出了一个带有覆盖的示例,我不想覆盖任何内容,我只想调整字幕流的大小。这是他们的例子:
'scale2ref[b][a];[a][b]overlay'
我最接近的是这样的:
ffmpeg -ss 00:28:00.200 -i Hillary-2016-08-21.mpg -t 00:01:00.000 -map 0:0 -c:v copy -map 0:3 -c:a copy -filter_complex "[0:6]scale2ref[b]" -map "[b]" cut.mkv
输出是:
Input #0, mpegts, from 'Hillary-2016-08-21.mpg':
Duration: 01:30:00.06, start: 20852.199389, bitrate: 6813 kb/s
Program 1
Stream #0:0[0xfa]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x12c](eng): Audio: aac_latm (HE-AAC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp
Stream #0:2[0x131](ita): Audio: aac_latm (HE-AAC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp (visual impaired)
Stream #0:3[0x191](eng): Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:4[0x3ea]: Unknown: none ([11][0][0][0] / 0x000B)
Stream #0:5[0x3ec]: Unknown: none ([11][0][0][0] / 0x000B)
Stream #0:6[0x3fc](eng): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)
Stream #0:7[0x1f40]: Unknown: none ([5][0][0][0] / 0x0005)
Streamcopy requested for output stream 0:0, which is fed from a complex filtergraph. Filtering and streamcopy cannot be used together.
我真的不明白如何使用过滤器并将调整大小的字幕流定向到输出文件中。
任何帮助表示赞赏!谢谢!