我尝试了许多不同的方法来尝试从图像文件中创建一个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交叉编译,因为我认为这可能是问题所在,但是唉,更新后问题仍然存在。
谢谢!
下面是一个使用ffmpeg的过程,它只在源视频上使用1个转码:
-
将图像循环到与源视频格式相同的静音音轨视频中。包括任何滤镜(例如淡出)
c:ffmpegffmpeg.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"
-
[可选]剪切源视频,包括任何过滤器
c:ffmpegffmpeg.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"
-
[如果源已经是mpegts,则不需要]如果你的源不是可连接的格式,将其转换为mpegts。这个例子使用mp4作为源格式是无损和快速的。
c:ffmpegffmpeg.exe -i "~tmptest_final_fade1.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "~tmptest_final1.ts" c:ffmpegffmpeg.exe -i "~tmptest_final_fade2.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "~tmptest_final2.ts"
-
连接您的2个视频文件,并可选择更改包装回mp4。这一步也是无损和快速的。
c:ffmpegffmpeg.exe -y -i "concat:~tmptest_final_fade1.ts|~tmptest_final_fade2.ts" -c copy -bsf:a aac_adtstoasc "test_final.mp4"