【问题标题】:How to crop last N seconds from a TS video如何从 TS 视频中裁剪最后 N 秒
【发布时间】:2013-12-28 10:22:08
【问题描述】:

有没有办法从视频中裁剪最后 N 秒?在这种情况下,格式为“MPEG-TS”。

使用 FFMPEG,我知道有一个开始时间和持续时间的选项,但在这个用例中这些都不可用。视频可以有任何可能的长度,因此时长不能是固定值。

此外,解决方案必须在 Windows 命令行中运行并且可以自动化。

【问题讨论】:

  • 您的视频是否仅限于特定的容器格式?如果是这样,请寻找特定于容器的工具,例如 avisplit from transcode。
  • 感谢您的提示。问题应该是“如何使用 Windows 中的任何命令行工具从 TS 视频中裁剪最后 N 秒。
  • 使用 TS 的工具不多。试试 tsMuxeR:videohelp.com/tools/tsMuxeR
  • 其实我先把它们转换成 MP4 h264 也可以。然后进行裁剪。但是 tsMuxeR 看起来很不错。我会试试的!
  • ..但是裁剪​​不支持从头开始裁剪。只有裁剪的开始和结束时间。 :(

标签: video ffmpeg mpeg2-ts


【解决方案1】:

可以通过以下步骤实现所需的功能:

  1. 使用 ffmpeg 来确定视频的长度。使用例如一个cmd脚本:

    set input=video.ts
    
    ffmpeg -i "%input%" 2> output.tmp
    
    rem search "  Duration: HH:MM:SS.mm, start: NNNN.NNNN, bitrate: xxxx kb/s"
    for /F "tokens=1,2,3,4,5,6 delims=:., " %%i in (output.tmp) do (
        if "%%i"=="Duration" call :calcLength %%j %%k %%l %%m
    )
    goto :EOF
    
    :calcLength
    set /A s=%3
    set /A s=s+%2*60
    set /A s=s+%1*60*60
    set /A VIDEO_LENGTH_S = s
    set /A VIDEO_LENGTH_MS = s*1000 + %4
    echo Video duration %1:%2:%3.%4 = %VIDEO_LENGTH_MS%ms = %VIDEO_LENGTH_S%s
    
  2. 计算剪辑操作的起点和终点

    rem ** 2:00 for the start, 4:00 from the end
    set /A starttime = 120
    set /A stoptime = VIDEO_LENGTH_S - 4*60 
    set /A duration = stoptime - starttime
    
  3. 剪辑视频。作为奖励,将 TS 文件转换为更优的格式,例如 H.264

    set output=video.mp4
    
    vlc -vvv --start-time %starttime% --stop-time %stoptime% "%input%" 
      --sout=#transcode{vcodec=h264,vb=1200,acodec=mp3, 
      ab=128}:standard{access=file,dst=%output%} vlc://quit
    
    rem ** Handbrake has much better quality **
    handbrakeCLI -i %input% -o %output% -e x264 -B 128 -q 25 
      --start-at duration:%starttime% --stop-at duration:%duration% 
    

【讨论】:

  • 这假定 ffmpeg 打印所有视频的持续时间,但情况可能并非如此。
猜你喜欢
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 2021-09-03
  • 2011-07-09
  • 2020-08-04
相关资源
最近更新 更多