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

时间:2014-03-27 23:16:38

标签: image video ffmpeg concat

我尝试了许多不同的方法尝试从图像文件中创建10秒的视频文件,并使用了与我用于编码视频文件的所有相同的开关和编解码器。但是,当我使用除complex_filter(强制视频通过另一轮转码)之外的任何东西连接两者时,生成的视频文件已损坏。我相信这是由于ffmpeg从图像创建的10秒剪辑的固有差异,但必须有一些方法让它以与我的视频文件完全相同的方式进行编码。

这是我用来将图像变成10s视频剪辑的命令(我添加了一个无声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以准备concat的命令:

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 个答案:

答案 0 :(得分:0)

这是一个使用ffmpeg的进程,仅在源视频上使用1个转码:

  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. 连接2个视频文件,并有选择地将包装器改回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"