FFmpeg:将视频分割成非常小的片段(例如5KB)

FFmpeg:将视频分割成非常小的片段(例如5KB),ffmpeg,Ffmpeg,我正在尝试使用FFmpeg将视频文件分割成小于10KB(理想情况下为5KB)的片段 我正在使用的视频是以下视频:。它的分辨率已经很低了 我已尝试将非常小的段_时间指定为00:00:0.04: ffmpeg -i BigBuckBunny_320x180.mp4 -c copy -map 0 -f segment -segment_time 00:00:0.04 BigBuckBunny_320x180_%03d.mp4 我尝试过指定顺序段框架,例如1、2、3、4、5、6、7。。。等等: ffm

我正在尝试使用FFmpeg将视频文件分割成小于10KB(理想情况下为5KB)的片段

我正在使用的视频是以下视频:。它的分辨率已经很低了

我已尝试将非常小的段_时间指定为00:00:0.04:

ffmpeg -i BigBuckBunny_320x180.mp4 -c copy -map 0 -f segment -segment_time 00:00:0.04 BigBuckBunny_320x180_%03d.mp4
我尝试过指定顺序段框架,例如1、2、3、4、5、6、7。。。等等:

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
我还尝试强制关键帧:

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
所有这些都会导致0.5s长的段,不同的文件大小平均约为50KB

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和0.5秒。这是FFmpeg的限制吗?我找不到任何文档来验证这一点

有没有办法将这些文件大小降低到5KB?FFmpeg有可能吗?如果没有,我是否可以使用其他工具?我看了看GStreamer,但看不出这是否可能,而且看起来很复杂


谢谢你的帮助。谢谢。

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

  • 使用ffmpeg的标准压缩对原始视频文件进行压缩:
  • 将“关键帧间隔”(keyframe interval)设定为1,以便每个帧都成为关键帧:
  • 将生成的文件拆分为长度为0.04的段,约为一帧的长度:

  • 我解决了上一个问题,其中只有第一个片段正确播放,使用:
    -reset\u timestamps 1

    320x180的单个帧是172K未压缩的。什么让你认为5K是可以实现的?谢谢你的回复。我已经使用ffmpeg的默认压缩将文件压缩了(从62MB压缩到22MB)。但是现在,当我尝试将压缩文件分割成段(使用00:00:01作为
    -segment\u time
    )时,它似乎在随机间隔进行分割。10秒、1秒、3秒、7秒、10秒等。当我尝试在每一帧分割时,我得到相同的片段(使用
    -片段帧:1,2,3,4,5…
    )。这是什么原因?即使在阅读了文档之后,对于FFmpeg是如何决定这些拆分的,我仍然有点困惑!我想这是因为关键帧,但我对这一过程了解不够,无法确定。我强迫每一帧都是关键帧,然后我设法分割了视频,但只有第一次分割成功。其余的分割只是一段黑色视频,没有音频。我可以使用Movavi在每一帧上进行分割(这会产生足够小的片段),但我必须手动进行分割,这对于长视频来说是不可行的。我想知道它在幕后使用的是什么软件,所以也许它可以通过脚本或命令来完成?我不认为这个目标是无法实现的,因为它已经实现了。视频的质量不是这里的问题。我需要一些小块来在未来的5G网络上传输视频,该网络正处于测试阶段,无法处理大于10KB的数据。我知道这不是一个常见的用例,但下面的命令显示了如何压缩、设置关键帧和将视频分割成片段,这些命令可能对某些人很有用。他们显然不需要像你所说的那样遵守同样的极端约束。
    ffmpeg BigBuckBunny_320x180.mp4 BigBuckBunny_320x180_compressed.mp4
    
    ffmpeg -i BigBuckBunny_320x180_compressed.mp4 -vcodec libx264 -x264-params keyint=1:scenecut=0 -acodec copy BigBuckBunny_320x180_compressed_frames.mp4
    
    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