使用 FFMPEG 转换文件以完全匹配另一个文件的规范?

Convert a file to match another's specification exactly with FFMPEG?

我有一系列来自同一来源的文件,因此在我与 FFMPEG 连接的所有方面都具有完全相同的格式

这非常快并且工作正常但是我不想获取可选的介绍文件(来自许多不同的来源和许多不同类型)并在加入之前将其转换以匹配其他文件。

如何使用 FFMPEG 执行此操作?

这是否提供了我需要的一切?

ffprobe -select_streams a:0 -show_entries \
  stream=codec_name,channels -of default=nw=1:nk=1 -v 0 ./file1.mov

ffprobe -select_streams v:0 -show_entries \
  stream=codec_name,width,height,r_frame_rate,pix_fmt \
  -of default=nw=1:nk=1 -v 0 ./file1.mov

这样我就可以:

ffmpeg -i intro.mp4 \ 
   -c:v h264 -s 1280x720 -pix_fmt yuv420p -framerate 30/1  \ 
   -c:a pcm_s16le -ca 1 intro.mov

然后将其无缝合并到其余部分?

ffmpeg -f concat -safe 0 -i videos.txt -c copy merged.mov -y

答案当然是“否”,因此请求您的支持。 合并文件 1、2 和 3 时音频很好,但合并 intro + 1、2 和 3 时音频太快。转换后的前奏文件在转换后和合并后始终可以单独播放,但其他文件在合并后播放音频速度太快。

我错过了什么?

更新:

所以最后这对介绍有用:

ffmpeg -i intro.mp4 \ 
   -c:v h264 -s 1280x720 -pix_fmt yuv420p -framerate 30 \ 
   -c:a pcm_s16le -ac 1 -b:a 512k -ar 32000 intro.mov -y

我怀疑 intro.mp4 的音频采样率比其他的高,-f concat 正在将虚拟输入文件的音频采样率设置为 intro.mov 和 运行它。

要解决此问题 运行 再次检查您的探头并检查音频采样率(我记不起输出中的名称,但可能是“sample_rate” ).让这个数fs再转码intro.mp4

ffmpeg -i intro.mp4 \
  -c:v h264 -s 1280x720 -pix_fmt yuv420p -framerate 30/1 \
  -c:a pcm_s16le -ar fs -ca 1 intro.mov

fs 替换为您找到的汇率。如果它播放速度更快,其他所有音频格式都兼容。