ffmpeg:将传输流(MPEG2 或 h264)重新编码为另一个传输流(h264)
ffmpeg: recode transport stream (MPEG2 or h264) to another transport stream (h264)
目前,我正在努力完成一项我想在 Synology DiskStation 上使用 perl 脚本执行的任务。
我不确定要使用的 ffmpeg 命令。
实际上,DiskStation 支持硬件编码,并且它可以很好地编码 MKV 文件。唯一缺少的是:我不想编码为 MKV,因为很难用我的其他软件来切割这些文件。
因此,我想再次编码为传输流。
我现在正在使用这个命令:
sudo ffmpeg -hide_banner -loglevel verbose -vaapi_device /dev/dri/renderD128 -i my_input_file.ts -map 0:v -map 0:a -c:v h264_vaapi -vf yadif,format=nv12,hwupload -y -b:v my_bitrate my_output_file.ts
现在,我总是得到一个错误:
Automatic encoder selection failed for output stream #0:1. Default encoder for format mpegts (codec mp2) is probably disabled. Please choose an encoder manually.
Error selecting an encoder for stream 0:1
对我来说,它似乎没有识别出我想使用 h264 编码而不是传输流的默认编码器。
对此有什么想法吗?
解释:
- 完成映射是为了摆脱不支持的流,例如图文电视,并减少一些流,因为我通常会获得不止一种语言流。
- 需要 sudo,因为只有 root 才可以在 Synology 上使用 vaapi 设备(可能在所有系统上)
如果有人能帮我一把就太好了。
谢谢,
马蒂亚斯
错误与音频流有关。默认编码器是 mp2 但你的构建似乎没有它。添加 -c:a aac
(更安全)或 -c:a copy
。如果 ffmpeg 的 MPEG-TS muxer 支持输入音频编解码器,后者将起作用。
目前,我正在努力完成一项我想在 Synology DiskStation 上使用 perl 脚本执行的任务。 我不确定要使用的 ffmpeg 命令。 实际上,DiskStation 支持硬件编码,并且它可以很好地编码 MKV 文件。唯一缺少的是:我不想编码为 MKV,因为很难用我的其他软件来切割这些文件。 因此,我想再次编码为传输流。 我现在正在使用这个命令:
sudo ffmpeg -hide_banner -loglevel verbose -vaapi_device /dev/dri/renderD128 -i my_input_file.ts -map 0:v -map 0:a -c:v h264_vaapi -vf yadif,format=nv12,hwupload -y -b:v my_bitrate my_output_file.ts
现在,我总是得到一个错误:
Automatic encoder selection failed for output stream #0:1. Default encoder for format mpegts (codec mp2) is probably disabled. Please choose an encoder manually.
Error selecting an encoder for stream 0:1
对我来说,它似乎没有识别出我想使用 h264 编码而不是传输流的默认编码器。
对此有什么想法吗?
解释:
- 完成映射是为了摆脱不支持的流,例如图文电视,并减少一些流,因为我通常会获得不止一种语言流。
- 需要 sudo,因为只有 root 才可以在 Synology 上使用 vaapi 设备(可能在所有系统上)
如果有人能帮我一把就太好了。
谢谢, 马蒂亚斯
错误与音频流有关。默认编码器是 mp2 但你的构建似乎没有它。添加 -c:a aac
(更安全)或 -c:a copy
。如果 ffmpeg 的 MPEG-TS muxer 支持输入音频编解码器,后者将起作用。