ffmpeg -f concat 可将文件连接起来。 ffmpeg -f concat -safe 0 -i mylist.txt -acodec aac -b:a 128K -f mp4 -movflags faststart -y out.mp4 其中mylist.txt 是一个文件列表,依次存储输入文件: file /home/1.m4a file /home/2.m4a file /home/3.m4a
用法举例目前有三个文件0.mp4 1.mp4 2.mp4 $ ffprobe -v quiet -show_entries stream=duration,start_time,codec_name 0.mp4[STREAM]codec_name=h264 start_time=0.000000duration=106.560000[/STREAM][STREAM]codec_name=ac3 start_time=0.000000duration=106.527979[SIDE_DATA][/SIDE_DATA][/STREAM]$ ffprobe -v quiet -show_entries stream=duration,start_time,codec_name 1.mp4[STREAM]codec_name=h264 start_time=0.000000duration=7.760000[/STREAM][STREAM]codec_name=ac3 start_time=0.000000duration=7.711979[SIDE_DATA][/SIDE_DATA][/STREAM] $ ffprobe -v quiet -show_entries stream=duration,start_time,codec_name 2.mp4[STREAM]codec_name=h264 start_time=0.000000duration=46.480000[/STREAM][STREAM]codec_name=ac3 start_time=0.015000duration=46.432000[SIDE_DATA][/SIDE_DATA][/STREAM] 106.560000 + 7.760000 + 46.480000 = 160.8 建立mylist.txt如下 file 0.mp4 file 1.mp4 file 2.mp4 执行命令: ffmpeg -f concat -safe 0 -i mylist.txt -c copy -f mp4 concat.mp4 查看生成的信息: $ ffprobe -v quiet -show_entries stream=duration,start_time,codec_name concat.mp4[STREAM]codec_name=h264 start_time=0.000000duration=160.800000[/STREAM][STREAM]codec_name=ac3 start_time=0.000000duration=160.767000[SIDE_DATA][/SIDE_DATA][/STREAM] 和理论计算是相符合的。 也可以只读每个片段中的一部分来进行合并,用inpoint和outpoint参数来指定。 file 0.mp4 inpoint 00:00:00.000 outpoint 00:00:05.000 file 1.mp4 inpoint 00:00:00.000 outpoint 00:00:05.000 file 2.mp4 inpoint 00:00:00.000 outpoint 00:00:05.000 每个片段只去前5秒,然后执行命令。 $ ffprobe -v quiet -show_entries stream=duration,start_time,codec_name concat.mp4[STREAM]codec_name=h264 start_time=0.000000duration=15.000000[/STREAM][STREAM]codec_name=ac3 start_time=0.000000duration=14.975000[SIDE_DATA][/SIDE_DATA][/STREAM] 需要注意的是这种inpoint的方式,可能会往前多获取一些数据(如果指定的时间点不是I帧的话)。
References:https:///ffmpeg-all.html |
|