FFmpeg 剪切和连接单个命令行

3
我有两个flac音频文件,我需要使用不同的时间码对它们进行剪切,然后使用ffmpeg的单个命令行将它们连接起来。有没有办法做到这一点?我尝试过一些方法,但效果并不是很好,输出文件的时间戳都混乱了(而不是从00:00开始的flac文件,我得到了一个从59:90开始的文件!!)而且这个命令行非常慢,只能在Unix系统上运行...希望有人能帮助我。
mkfifo temp1 temp2 
ffmpeg -y -i PMM_20170116-1100_1.flac -ss 3590 -t 10 -c copy -acodec copy -f flac temp1 2> /dev/null  & ffmpeg -y -i PMM_20170116-1200_1.flac -ss 0 -t   3590 -c copy -acodec copy -f flac temp2 2> /dev/null & ffmpeg -f flac -i "concat:temp1|temp2" -ac 2 -ar 48000 cutmergetest.flac
1个回答

2

快速方法

创建一个文本文件。

file file1.flac
inpoint 3590
outpoint 3600
file file2.flac
inpoint 0
outpoint 3590

运行

ffmpeg -f concat -i list.txt -c copy merged.flac
慢速方法
运行:
ffmpeg -ss 3590 -t 10 -i file1.flac -ss 0 -t 3590 -i file2.flac -filter_complex "[0][1]concat=n=2:v=0:a=1" -ac 2 -ar 48000 cutmergetest.flac

谢谢回答,慢速方法很好用,因为它对输出进行了解码和重新编码,第一个方法仍然存在时间码问题(可能是flac的问题?),当我打开merged.flac文件时,它不是从00:00开始,而是从59:50开始,所以这是个问题,因为我需要创建一个下载服务,需要尽快获得输出。 - MadManMoon
看起来,使用ffmpeg时,你只能使用慢速方法。FLAC流具有一个查找表,当FLAC进行流复制时,该头文件被传递但不会被ffmpeg修改。如果你将结果打包到像MOV或MKV这样的容器中,它们的元数据将取代FLAC的元数据,因此时间戳将是正确的,但在依赖于FLAC比特流的容器中则不行。 - Gyan

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