FFmpeg:将视频分成非常小的尺寸(例如5KB)

时间:2019-03-26 16:40:20

标签: ffmpeg

我正在尝试使用FFmpeg将视频文件拆分为小于10KB(最好为5KB)的段。

我正在使用的视频是这个视频:https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4。它已经具有低分辨率。

我尝试指定非常小的-segment_time 00:00:0.04:

ffmpeg -i BigBuckBunny_320x180.mp4 -c copy -map 0 -f segment -segment_frames 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 -segment_list out.csv BigBuckBunny_320x180_%03d.mp4

我尝试指定顺序的-segment_frames例如1,2,3,4,5,6,7 ...等:

ffmpeg -i BigBuckBunny_320x180.mp4 -force_key_frames "expr:gte(t,n_forced*0.04)" -c copy -map 0 -f segment -segment_frames 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 BigBuckBunny_320x180_%03d.mp4

我还尝试过强制关键帧:

username@My-Air:~/dev/video$ less out.csv 
BigBuckBunny_320x180_000.mp4,0.000000,0.500000
BigBuckBunny_320x180_001.mp4,0.500000,1.000000
BigBuckBunny_320x180_002.mp4,1.000000,1.500000
BigBuckBunny_320x180_003.mp4,1.500000,2.000000
BigBuckBunny_320x180_004.mp4,2.000000,2.500000
BigBuckBunny_320x180_005.mp4,2.500000,3.000000
...

username@My-Air:~/dev/video/bunny_0.5s_splits$ ls -l
total 134552
-rw-r--r--  1 username  staff    16K 25 Mar 23:40 BigBuckBunny_320x180_000.mp4
-rw-r--r--  1 username  staff    26K 25 Mar 23:40 BigBuckBunny_320x180_001.mp4
-rw-r--r--  1 username  staff    36K 25 Mar 23:40 BigBuckBunny_320x180_002.mp4
-rw-r--r--  1 username  staff    44K 25 Mar 23:40 BigBuckBunny_320x180_003.mp4
-rw-r--r--  1 username  staff    40K 25 Mar 23:40 BigBuckBunny_320x180_004.mp4
-rw-r--r--  1 username  staff    38K 25 Mar 23:40 BigBuckBunny_320x180_005.mp4
-rw-r--r--  1 username  staff    43K 25 Mar 23:40 BigBuckBunny_320x180_006.mp4
-rw-r--r--  1 username  staff    44K 25 Mar 23:40 BigBuckBunny_320x180_007.mp4
-rw-r--r--  1 username  staff    50K 25 Mar 23:40 BigBuckBunny_320x180_008.mp4
-rw-r--r--  1 username  staff    49K 25 Mar 23:40 BigBuckBunny_320x180_009.mp4
-rw-r--r--  1 username  staff    50K 25 Mar 23:40 BigBuckBunny_320x180_010.mp4
-rw-r--r--  1 username  staff    51K 25 Mar 23:40 BigBuckBunny_320x180_011.mp4
-rw-r--r--  1 username  staff    51K 25 Mar 23:40 BigBuckBunny_320x180_012.mp4
-rw-r--r--  1 username  staff    57K 25 Mar 23:40 BigBuckBunny_320x180_013.mp4
-rw-r--r--  1 username  staff    53K 25 Mar 23:40 BigBuckBunny_320x180_014.mp4
-rw-r--r--  1 username  staff    57K 25 Mar 23:40 BigBuckBunny_320x180_015.mp4
-rw-r--r--  1 username  staff    57K 25 Mar 23:40 BigBuckBunny_320x180_016.mp4
-rw-r--r--  1 username  staff    61K 25 Mar 23:40 BigBuckBunny_320x180_017.mp4
...

所有这些都会导致长度为0.5s的段,文件大小平均约为50KB。

{{1}}

奇怪的是,时间戳记恰好是0s和0.5s。这是FFmpeg的限制吗?我找不到任何文档来验证这一点。

是否可以将这些文件的大小减小到5KB? FFmpeg有可能吗?如果没有,还有其他我可以使用的工具吗?我看着GStreamer,但无法真正看到是否可行,而且看起来非常复杂。

任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

好的,我终于得到了想要的东西。现在,我的视频片段全部在10KB以下,平均大约5KB。我使用了以下命令:

  1. 使用ffmpeg的标准压缩方式压缩原始视频文件:
ffmpeg BigBuckBunny_320x180.mp4 BigBuckBunny_320x180_compressed.mp4
  1. 将关键帧间隔设置为1,以便每个帧都成为关键帧:
ffmpeg -i BigBuckBunny_320x180_compressed.mp4 -vcodec libx264 -x264-params keyint=1:scenecut=0 -acodec copy BigBuckBunny_320x180_compressed_frames.mp4
  1. 将生成的文件分割为长度为0.04的段,大约为一帧的长度:
ffmpeg -i BigBuckBunny_320x180_compressed_frames.mp4 -c copy -map 0 -segment_time 00:00:0.04 -f segment -reset_timestamps 1 BigBuckBunny_320x180_compre
ssed_frames%03d.mp4

我使用-reset_timestamps 1解决了只有第一段才能正常播放的上一个问题。