ffmpeg:将传输流(MPEG2或h264)重新编码为另一个传输流(h264)

时间:2017-06-14 12:05:54

标签: ffmpeg synology

目前,我正在努力完成我想在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设备(可能在所有系统上)

如果有人能帮助我,那就太好了。

谢谢, 的Matthias

1 个答案:

答案 0 :(得分:0)

错误与音频流有关。默认编码器是mp2,但你的构建似乎没有它。添加-c:a aac(更安全)或-c:a copy。如果ffmpeg的MPEG-TS复用器支持输入音频编解码器,后者将起作用。