ffmpeg使用笔记——视频的剪切与合并
〇、ffmpeg版本号
7.1.0
一、基本命令
1.1 剪切
ffmpeg -ss 0:53:25 -t 0:00:50 -i N:\Test\Sample.mkv -vcodec copy -acodec copy N:\Test\Cut.mkv.mkv
1.2 拼接
#博客教程里没有 -safe 0 这一项,加上就可以拼接mkv格式纯视频
ffmpeg -f concat -safe 0 -i N:\Test\list.txt -c copy N:\Test\Merge.mkv
list.txt 格式
file 'N:\Test\Sample1.mkv'
file 'N:\Test\Sample2.mkv'
二、mkv格式
2.1 mkv纯视频、mka纯音频
基本正常
但持续时间会有问题,需要逐帧精确剪切会有问题#命令
ffmpeg -ss 00:40:00 -t 0:02:00 -i N:\Test\Sample.mkv -vcodec copy -acodec copy N:\Test\Cut.mkv
#结果
frame= 2909 fps=0.0 q=-1.0 Lsize= 37515kB time=00:01:59.97 bitrate=2561.5kbits
/s speed= 513x
2.2 单音轨多字幕
#命令
ffmpeg -ss 00:00:10 -t 0:01:00 -i N:\Test\Sample.mkv -vcodec copy -acodec copy N:\Test\Cut.mkv
只能导出单音轨单字幕
视频从原起始位置开始,实际持续时间为ss+t
视频内容结束后持续黑屏,直至原结束位置
2.2.1 字幕问题的解释
#输入
Stream #0:0(jpn): Video: h264 (High) (H264 / 0x34363248), yuv420p(progressiv
e), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc (
default)
Stream #0:1(jpn): Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stere
o, fltp (default)
Stream #0:2(chi): Subtitle: ass (default)
Stream #0:3(chi): Subtitle: ass
Stream #0:4(jpn): Subtitle: ass
#结果
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (ass (ssa) -> ass (ssa))
ffmpeg只输出了有default标记的文件流,所以导致单字幕
同理应该可以解释输入多音轨视频、输出单音轨视频的问题
2.3 多音轨多字幕
只能导出单音轨单字幕
视频起始位置、实际持续时间均正常
视频内容结束后持续黑屏,直至原结束位置
2.4 总结
可以认为,先分流音视频是必须的,不仅可以避免上述问题
而且非mkv格式纯视频、mka格式纯音频,会导致导出的文件比特率无法显示
无论是由MKVExtractGUI分流的AAC音频,还是直接用ffmpeg剪切的mkv格式带音轨视频,都无比特率
三、纯音频
3.1 AAC格式
#照搬裁剪视频格式,无法运行
ffmpeg -ss 00:00:10 -t 0:01:00 -i N:\Test\Sample.aac -vcodec copy -acodec copy N:\Test\Cut.aac
#只删去 -vcodec copy 依然不行;删去 -vcodec copy -acodec copy 可以运行,但出现了转码过程
ffmpeg -ss 00:00:10 -t 0:01:00 -i N:\Test\Sample.aac N:\Test\Cut.aac
#上述两个命令都会出现如下提示
#出现在输入之前[aac @ 000000000054a9a0] Estimating duration from bitrate, this may be inaccurate
#第二个命令的输出与结果
Stream mapping: #Stream mapping出现在Output之前
Stream #0:0 -> #0:0 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
Output #0, adts, to 'N:\Test\Cut.aac':
Metadata:
encoder : Lavf57.76.100 #重编码
Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc57.102.100 aac
size= 982kB time=00:01:00.01 bitrate= 134.0kbits/s speed=21.7x
虽然单纯在ffmpeg中,可以避开处理AAC音频的问题。但后续如果使用Ae乃至MeGUI(忘了MeGUI输出是什么格式的了,至少Ae导出的AAC是个问题,除非换个音频格式),还是会遇上这个问题。
3.2 M4A格式
M4A格式没问题,仿照视频方法即可
3.3 MP3格式
同上,并且虽然在cmd中会出现中文标记乱码的情况,但输出文件的标记没有问题。
#乱码情况
Input #0, mp3, from ' N:\Test\Sample.mp3':
Metadata:
artist : 涓冩湹缁勫悎
title : 涓嶄竴鏍风殑鎴
comment : V1.0
Duration: 00:04:17.72, start: 0.000000, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Output #0, mp3, to 'N:\Test\Cut.mp3':
Metadata:
TPE1 : 涓冩湹缁勫悎
TIT2 : 涓嶄竴鏍风殑鎴
comment : V1.0
TSSE : Lavf57.76.100
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s#输出文件代码
General
Complete name : N:\Test\Cut.mp3
Format : MPEG Audio
File size : 2.29 MiB
Duration : 1 min 0 s
Overall bit rate mode : Constant
Overall bit rate : 320 kb/s
Track name : Sample
Performer : Sample
Writing library : LAME
comment : V1.0
3.4 Flac格式
可以剪切,放不了...
#命令
ffmpeg -ss 00:00:10 -t 0:01:00 -i N:\Test\Sample.flac -vcodec copy -acodec copy N:\Test\Cut.flac
#代码
Input #0, flac, from 'N:\Test\Sample.flac':
Metadata:
ALBUM : 鏈堟弧寮
ARTIST : 鍒樼弬鐭
TITLE : 鏈堟弧寮
Duration: 00:04:14.99, start: 0.000000, bitrate: 888 kb/s
Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
Output #0, flac, to 'N:\Test\Cut.flac':
Metadata:
ALBUM : 鏈堟弧寮
ARTIST : 鍒樼弬鐭
TITLE : 鏈堟弧寮
encoder : Lavf57.76.100
Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size= 6102kB time=00:00:59.93 bitrate= 834.0kbits/s speed=3.84e+003x
四、MP4格式
没问题
没有尝试过MP4格式带软字幕的,估计一般也看不到
封装了章节等其他内容的,还是要把章节剔除,再剪辑。
最好就是干干净净的单音轨单视频轨,无论是MP4还是MKV封装。
五、FLV格式
没问题
六、H264格式纯视频
之前试过,似乎比AAC格式纯音频问题还大,根本读不了。