FFMPEG-将全帧图像添加到视频开头

3
我尝试了很多不同的方法来将图像文件创建为10秒的视频文件,并使用与编码视频文件相同的开关和编解码器。然而,当我使用除了“complex_filter”之外的任何东西来连接这两个文件时(这会强制视频通过另一轮转码),结果得到的视频文件是损坏的。我认为这是由于ffmpeg从图像创建的10秒片段的固有差异所致,但必须有一种方法可以使其以与我的视频文件完全相同的方式进行编码。
以下是我用来将图像转换为10秒视频剪辑的命令(我添加了一个静音的mp3,因为我认为在视频中间开始的音频流会搞乱事情):
ffmpeg -loop 1 -i splash.jpg -i silence.mp3 -c:v libx264 -preset slow -g 60 -r 29.97 -crf 16 -c:a libfdk_aac -b:a 256k -cutoff 18000 -t 5 tmpoutput1.mp4

这是我正在使用的命令对视频进行编码:

ffmpeg -i input.f4v -c:v libx264 -preset slow -g 60 -r 29.97 -crf 16 -c:a libfdk_aac -b:a 256k -cutoff 18000 tmpoutput2.mp4

下面是我用来转换这两个文件成为.ts格式以准备进行合并的命令:

ffmpeg -i tmpoutput1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmpoutput1.ts

最后是concat (这里是我遇到疯狂视频损坏的地方,沿途看起来一切正常):

ffmpeg -i "concat:tmpoutput1.ts|tmpoutput2.ts" -c copy output.mp4

问题在于我已经转码了所有内容一次,我应该能够使其以足够相似的结构进行转码,以便可以将其连接起来而不需要再添加另一个转码。

有人之前成功地使用ffmpeg在视频前添加全帧闪屏图吗?我正在使用全新的交叉编译ffmpeg,因为我认为这可能是问题所在,但遗憾的是,在更新后问题仍然存在。

谢谢!

1个回答

1
这里有一个使用ffmpeg的过程,只对源视频进行一次转码。
  1. 将图像循环成与源视频格式相同的无声音轨视频。包括任何过滤器(例如淡入淡出)

    c:\ffmpeg\ffmpeg.exe -loop 1 -i "test_image.png" -i silence.mp3 -vf "fade=t=in:st=0:d=0.5,fade=t=out:st=4.5:d=0.5,scale=1920x1080" -c:v libx264 -preset slow -profile:v high -r 29.97 -crf 16 -pix_fmt yuv420p -c:a libfdk_aac -b:a 256k -cutoff 18000 -t 5 "~tmptest_final_fade1.mp4"
    
  2. [可选] 剪辑源视频,包括任何过滤器

    c:\ffmpeg\ffmpeg.exe -y -i "test_source.mp4" -af "afade=t=in:st=0:d=0.5,afade=t=out:st=29.5:d=0.5" -vf "fade=t=in:st=0:d=0.5,fade=t=out:st=29.5:d=0.5" -c:v libx264 -preset slow -profile:v high -r 29.97 -crf 16 -pix_fmt yuv420p -c:a libfdk_aac -b:a 256k -cutoff 18000 -ss 0 -t 30 -shortest "~tmptest_final_fade2.mp4"
    
  3. [如果源文件不是mpegts格式,则不需要此步骤] 如果源文件不是可连接的格式,请将其转换为mpegts格式。这个例子使用mp4作为源格式,是无损和快速的。

    c:\ffmpeg\ffmpeg.exe -i "~tmptest_final_fade1.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "~tmptest_final1.ts"
    c:\ffmpeg\ffmpeg.exe -i "~tmptest_final_fade2.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "~tmptest_final2.ts"
    
  4. 连接两个视频文件,并可选择将封装器更改回mp4格式。这一步也是无损和快速的。

    c:\ffmpeg\ffmpeg.exe -y -i "concat:~tmptest_final_fade1.ts|~tmptest_final_fade2.ts" -c copy -bsf:a aac_adtstoasc "test_final.mp4"
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接