我有一个视频文件 h265 mkv,它有双音频和多个字幕。我想将其转换为 h264,因为它不需要在我的 jellyfin 服务器上进一步转码。但我找不到正确的参数来保留所有音频和字幕,只转码视频。
我目前想到的命令是:
./ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i "input.mkv" -c:a copy -c:v h264_nvenc -ss 00:00:13 -t 30 -map 0:v -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 "output.mp4"
我得到了输出
Automatic encoder selection failed for output stream #0:3. Default encoder for format mp4 (codec none) is probably disabled. Please choose an encoder manually.
Error selecting an encoder for stream 0:3
当我同时进行转码和复用时,我得到了这个输出
单独转码为 mp4 并进行多路复用即可
谢谢
答案1
我们可以通过添加-c:s mov_text
参数来选择字幕编解码器,如下所述这里:
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i "input.mkv" -c:a copy -c:v h264_nvenc -c:s mov_text -ss 00:00:13 -t 30 -map 0:v -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 "output.mp4"
另一个选项是选择 MKV 容器而不是 MP4 容器:
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i "input.mkv" -c:a copy -c:v h264_nvenc -ss 00:00:13 -t 30 -map 0:v -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 "output.mkv"
您遇到的问题“FFmpeg 不会自动选择 MP4 的字幕编解码器“ 如下所述票。
“stream #0:3”是字幕流,我们必须指定字幕编解码器明确地。
为了测试,我们可以使用带字幕的合成模式来重现该问题:
- 首先创建两个字幕文本文件:
in0.srt
:
1
00:00:00,0 --> 00:00:01,0
Eng 0 to 1
2
00:00:01,0 --> 00:00:02,0
Eng 1 to 2
3
00:00:02,0 --> 00:00:03,0
Eng 2 to 3
4
00:00:03,0 --> 00:00:04,0
Eng 3 to 4
in1.srt
:
1
00:00:00,0 --> 00:00:01,0
Ita 0 to 1
2
00:00:01,0 --> 00:00:02,0
Ita 1 to 2
3
00:00:02,0 --> 00:00:03,0
Ita 2 to 3
4
00:00:03,0 --> 00:00:04,0
Ita 3 to 4
- 使用 FFmpeg创建
input.mkv
合成视频、两个合成音频流和两个字幕流(用于测试):
ffmpeg -y -f lavfi -i testsrc=size=384x206:rate=1 -f lavfi -i sine=frequency=400 -f lavfi -i sine=frequency=1000 -sub_charenc CP1252 -i in0.srt -sub_charenc CP1252 -i in1.srt -map:v 0 -map:a 1 -map:a 2 -map:s 3 -map:s 4 -vcodec libx265 -crf 17 -pix_fmt yuv420p -acodec aac -ar 22050 -scodec ass -metadata:s:s:0 language=eng -metadata:s:s:1 language=ita -disposition:s:s:1 default+forced -t 10 input.mkv
- 执行问题中的 FFmpeg 命令以重现错误消息:
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i "input.mkv" -c:a copy -c:v h264_nvenc -ss 00:00:13 -t 30 -map 0:v -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 "output.mp4"
错误信息:
输出流 #0:3 的自动编码器选择失败。mp4 格式(编解码器无)的默认编码器可能已禁用。请手动选择编码器。为流 0:3 选择编码器时出错
- 执行“更正后的” FFmpeg 命令(不带
-ss
和-t
):
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i "input.mkv" -c:a copy -c:v h264_nvenc -c:s mov_text -map 0:v -map 0:a:0 -map 0:a:1 -map 0:s:0 -map 0:s:1 "output.mp4"
- 检查
output.mp4
使用媒体信息工具。
MediaInfo 输出:
General
Complete name : C:\Tmp\output.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 214 KiB
Duration : 10 s 78 ms
Overall bit rate mode : Variable
Overall bit rate : 174 kb/s
Writing application : Lavf59.27.100
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
Format settings : CABAC / 2 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 2 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 10 s 0 ms
Bit rate mode : Variable
Bit rate : 31.1 kb/s
Maximum bit rate : 3 200 kb/s
Width : 384 pixels
Height : 206 pixels
Display aspect ratio : 1.85:1
Frame rate mode : Constant
Frame rate : 1.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.393
Stream size : 37.9 KiB (18%)
Codec configuration box : avcC
Audio #1
ID : 2
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 10 s 78 ms
Bit rate mode : Constant
Bit rate : 67.5 kb/s
Channel(s) : 1 channel
Channel layout : C
Sampling rate : 22.05 kHz
Frame rate : 21.533 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 83.0 KiB (39%)
Default : Yes
Alternate group : 1
Audio #2
ID : 3
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 10 s 78 ms
Bit rate mode : Constant
Bit rate : 66.2 kb/s
Channel(s) : 1 channel
Channel layout : C
Sampling rate : 22.05 kHz
Frame rate : 21.533 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 82.6 KiB (39%)
Default : No
Alternate group : 1
Text #1
ID : 4
Format : Timed Text
Muxing mode : sbtl
Codec ID : tx3g
Duration : 10 s 46 ms
Duration_FirstFrame : -954 ms
Bit rate mode : Variable
Bit rate : 100 b/s
Stream size : 125 Bytes (0%)
Language : English
Default : No
Forced : No
Alternate group : 3
Text #2
ID : 5
Format : Timed Text
Muxing mode : sbtl
Codec ID : tx3g
Duration : 10 s 46 ms
Duration_FirstFrame : -954 ms
Bit rate mode : Variable
Bit rate : 100 b/s
Stream size : 125 Bytes (0%)
Language : Italian
Default : Yes
Forced : No
Alternate group : 3
如果由于我的假设错误而仍然不起作用,您可以使用 MediaInfo 检查您的输入文件(将信息添加到您的问题中)。