我正在开发一个应用程序,该应用程序需要使用FFmpeg C ++ API克隆所有流的MP4视频文件,并已成功基于FFmpeg remuxing example使它工作。
这对于视频和音频流非常有用,但是当视频包含数据流(实际上是根据MediaInfo的QuickTime时间码)时,我会收到此错误。
Output #0, mp4, to 'C:\Users\user\Desktop\shortOut.mp4':
Stream #0:0: Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv,progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 1208 kb/s
Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 32s
Stream #0:2: Data: none (tmcd / 0x64636D74), 0 kb/s
[mp4 @ 0000000071edf600] Could not find tag for codec none in stream #2, codec not currently supported in container
我发现这种情况发生在对avformat_write_header()
的呼叫中。
有意义的是,如果FFmpeg不知道编解码器,则无法将其写入标头,但是我发现使用ffmpeg命令行可以使用复制命令对流进行完美处理,类似:
ffmpeg -i input.mp4 -c:v copy -c:a copy -c:a copy output.mp4
我一直在分析ffmpeg.c的实现,以试图了解它们如何进行流复制,但是在庞大的开发过程中进行跟踪非常痛苦。
使用FFmpeg C ++ API重分配此类型的数据流的正确方法是什么?有提示或指针吗?