如何使用FFMPEG将mp4转换为h264添加AUD

如何使用FFMPEG将mp4转换为h264添加AUD,ffmpeg,Ffmpeg,我正在尝试使用FFMPEG将mp4剪辑转换为h264 ByTestStream格式。通过访问libx264,我已经成功地从源代码编译了FFMPEG 查看libx264下FFMPEG(版本3.2.2)的文档,有一个bool标志-aud。文中给出了实例 ffmpeg -i input.flac -id3v2_version 3 out.mp3 使用此格式,以下命令可以工作,但不会在输出文件中生成所需的AUD: ffmpeg -i input.mp4 -codec:v libx264 -aud 1

我正在尝试使用FFMPEG将mp4剪辑转换为h264 ByTestStream格式。通过访问libx264,我已经成功地从源代码编译了FFMPEG

查看libx264下FFMPEG(版本3.2.2)的文档,有一个bool标志-aud。文中给出了实例

ffmpeg -i input.flac -id3v2_version 3 out.mp3
使用此格式,以下命令可以工作,但不会在输出文件中生成所需的AUD:

ffmpeg -i input.mp4 -codec:v libx264 -aud 1 output.h264
我还尝试了不同的版本,包括:

ffmpeg -i input.mp4 -vcodec libx264 -aud 1 output.h264
ffmpeg -i input.mp4 -aud 1 output.h264
等等

我想我对执行这个操作有些误解。我基本上想在mp4容器中拍摄一部h264电影,然后将其作为h264流转储,并添加AUD。你知道为什么这样不行吗

(我还尝试使用带有-aud标志的x264,运行良好,但没有产生所需的输出)


由于MPEG-TS muxer创建AUD,此两步非破坏性过程有效:

ffmpeg -i in.mp4 -c copy -map v -vbsf h264_mp4toannexb in.ts
然后

ffmpeg -i in.ts -c copy -map v -f h264 in.h264

由于MPEG-TS muxer创建AUD,因此此两步无损过程有效:

ffmpeg -i in.mp4 -c copy -map v -vbsf h264_mp4toannexb in.ts
然后

ffmpeg -i in.ts -c copy -map v -f h264 in.h264

谢谢你的链接,我需要进一步看看。只需快速尝试您提供的命令,但不会在输出中生成AUD(尽管它比我之前所做的要快得多)。我还尝试添加-aud 1标志,但没有成功。从第二个链接开始,我尝试使用他们刚刚输出的output.h264而不是output.ts,但仍然不起作用。所有这些设备的第一个接入单元类型都是SEI(6),而不是附件B格式的AUD(9)。事实上,我在输出文件的十六进制转储文件中找不到任何预期的AUD单位(00 00 01 69)。当然,使用
-c copy
,它不会生效,因为libx264不在使用中。@StevenPenny-在ffmpeg的完整帮助输出中的“libx264 AVOptions”下,有一个-AUD选项,听起来像是我想要的。通过运行ffmpeg-h fullthanker@stevenny,我得到了全面的帮助。看来这对我有用。我以前尝试过-x264opts,但我认为这是在错误编译的ffmpeg版本上发生的(当时它只是不断抱怨缺少libx264)。我始终看到00 00 01 09(或00 00 01 69),这与我对AUD的预期一致。不过,此命令会对视频进行重新编码,因此它不仅仅是具有新格式的原始视频。请参阅我的答案,了解可能有效的非破坏性方法。感谢链接,我需要进一步了解它们。只需快速尝试您提供的命令,但不会在输出中生成AUD(尽管它比我之前所做的要快得多)。我还尝试添加-aud 1标志,但没有成功。从第二个链接开始,我尝试使用他们刚刚输出的output.h264而不是output.ts,但仍然不起作用。所有这些设备的第一个接入单元类型都是SEI(6),而不是附件B格式的AUD(9)。事实上,我在输出文件的十六进制转储文件中找不到任何预期的AUD单位(00 00 01 69)。当然,使用
-c copy
,它不会生效,因为libx264不在使用中。@StevenPenny-在ffmpeg的完整帮助输出中的“libx264 AVOptions”下,有一个-AUD选项,听起来像是我想要的。通过运行ffmpeg-h fullthanker@stevenny,我得到了全面的帮助。看来这对我有用。我以前尝试过-x264opts,但我认为这是在错误编译的ffmpeg版本上发生的(当时它只是不断抱怨缺少libx264)。我始终看到00 00 01 09(或00 00 01 69),这与我对AUD的预期一致。不过,此命令会对视频进行重新编码,因此它不仅仅是具有新格式的原始视频。请参阅我的答案,了解一种可能有效的非破坏性方法。我发现这种方法有一个错误(我认为这是因为除了h264第一个流之外,显然还有第二个mjpeg格式的流),它抱怨mjpeg不受支持。我想我需要添加标志以仅使用第一个流(#0:0)。我模模糊糊地记得在文档中遇到了如何做到这一点,但我现在记不起来了。在这种情况下,使用
-map 0:v:0
而不是
-map v
,我发现这个方法有一个错误(我想,因为除了h264第一个流之外,显然还有第二个mjpeg格式的流)它还在抱怨mjpeg得不到支持。我想我需要添加标志以仅使用第一个流(#0:0)。我模模糊糊地记得在文档中遇到了如何做到这一点,但我无法立即记住。在这种情况下,请使用
-map 0:v:0
而不是
-map v