yzrStart

 

使用ffmpeg 插入片头片尾(指定时长)

功能需求:

1、插入的片头可以时图片或视频。

图片格式暂时未jpg

视频格式为mp4。

可能存在的问题:

1)、图片需要先转换成ts文件:增加视频和音频。

2)、mp4文件可能无声音。

3)、片头片尾的参数与录制视频的参数不匹配:导致连接过程可能会黑屏。

 

 

首先参数统一

1、如何加快编码 h264 

libx264

-c:v libx264 -preset ultrafast -tune zerolatency -crf 23
-preset ultrafast 可以加快编码速度。
-tune zerolatency 启用zerolatency调整,降低编码延迟
-crf 23 :调整视频质量
 
2、如何生成静音视频
-f  lavfi -t 5 -i anullsrc

 

3、如何判断一个mp4文件是否没有声音。

result_opening_audio=$(ffprobe -v error -select_streams a -show_entries stream=codec_name -of default=nw=1:nk=1  $insert_opening)
 if [[ -n $result_opening_audio ]]  ; then
           echo "have audio"
           ionice -c 1 -n 0 ffmpeg -y -ss 0 -i $insert_opening -vf "scale=$insert_width:$insert_height,format=yuv420p" -r 15  -c:v libx264   -preset ultrafast -tune zerolatency -crf 23   -c:a aac -b:a 96k -ar 48000 -t $insert_opening_duration  ${j}/insert_opening_1.ts &
else
           echo "only video"
           ionice -c 1 -n 0 ffmpeg -y -ss 0 -i $insert_opening  -f lavfi -i anullsrc -vf "scale=$insert_width:$insert_height,format=yuv420p" -r 15  -c:v libx264   -preset ultrafast -tune zerolatency -crf 23   -c:a aac -b:a 96k -ar 48000 -t $insert_opening_duration  ${j}/insert_opening_1.ts &
fi

4、如何让一张图片指定时长的视频

ionice -c 1 -n 0 ffmpeg  -y -framerate 15 -loop 1 -i $insert_opening  -f lavfi  -t $insert_opening_duration -i anullsrc -vf "scale=$insert_width:$insert_height,format=yuv420p"  -r 15 -c:v libx264 -preset ultrafast -tune zerolatency -crf 23  -c:a aac -ar 48000   -shortest ${j}/insert_opening_1.ts &

 

5、如何用ffmpeg -f concat 拼接ts文件:

ionice -c 1 -n 0 ffmpeg -y -f concat -i $j/tslists.txt  -c copy  ${v}_MP4/$filename.mp4 &
 
注意点:
1)、首个ts文件:视频和声音都得具备,否则,后面视频不正常。
2)、不同类型的ts文件连接时,参数要保持一致:分辨率,等。如果分辨率不一致,连接过程,用vlc看会是黑屏。
 
连接过程中的时间戳不一致不要紧。
 
3)tslist.txt 格式 ffmpeg -y -f concat
file '0.ts'
file '1.ts'
 ffmpeg -y -f concat -safe 0
那格式就要变:变成绝对路劲
file '/record/0.ts'
file '/record/1.ts'

 

 

其他技巧1:重新编码,就不用考虑其他问题了,但是时间很慢,不推荐
ionice -c 1 -n 0 ffmpeg -y -f concat  -segment_time_metadata 1 -i ${j}/tslists_end.txt  -vf select=concatdec_select -af aselect=concatdec_select,aresample=async=1   ${j}/insert_ending.ts

其他技巧2:如何重新设置一个文件开始时间点

ffmpeg -y -i input.ts -c copy -muxdelay 0 -muxpreload 0 output.ts

 

讲解FFMPEG H264/H265 编码延迟问题_ffmpeg 解码延迟-CSDN博客

一些简单详细的操作看下面这个博客:

ffmpeg常用命令_ffmpeg h246-CSDN博客

posted on   yzrStart  阅读(375)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端

导航

统计

点击右上角即可分享
微信分享提示