video - FFMPEG select between and setpts 创建流的副本

标签 video ffmpeg video-editing

我需要修剪视频中的一些剪辑,这是我找到的最佳方式(无需解包帧,或仅修剪关键帧,尽管无需转码即可这样做)
我不太明白这种 setpts 的含义,ffmpeg 写道,',' 有问题,但它仍然有效。

ffmpeg -y -i 0310.mp4 -vf "select='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)',setpts=N/FRAME_RATE/TB" -af "aselect='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)',asetpts=N/SR/TB" -vcodec libx264 -b:v 978k -acodec aac -b:a 242k 0310_TT.mp4
但是在这里有必要列出一长串这样的中间,甚至不接受控制台窗口,开始寻找,找到 -filter_complex_script,但据我了解,它不能完全替代 -vf -af。但通过实验,它似乎适应了。
ffmpeg -y -i 0310.mp4 -filter_complex_script mysavedscript.txt -vcodec libx264 -b:v 978k -acodec aac -b:a 242k 0310_TT.mp4
我的保存脚本.txt:
[0:v:0]select='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)';
[0:v:0]setpts=N/FRAME_RATE/TB;
[0:a:0]aselect='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)';
[0:a:0]asetpts=N/SR/TB
因此,它会创建原始视频和音频轨道的副本。我尝试了一些映射,但没有任何效果。来自 filter_complex 的过滤器创建一些其他流。
Stream mapping:
  Stream #0:0 (h264) -> select
  Stream #0:0 (h264) -> setpts
  Stream #0:1 (aac) -> aselect
  Stream #0:1 (aac) -> asetpts
  select -> Stream #0:0 (libx264)
  setpts -> Stream #0:1 (libx264)
  aselect -> Stream #0:2 (aac)
  asetpts -> Stream #0:3 (aac)
结果我得到了这个,以及视频的中断持续时间:
Video: MPEG4 Video (H264) 1920x1080 60fps 1226kbps [V: h264 high L4.2, yuv420p, 1920x1080, 1226 kb/s]
Video: MPEG4 Video (H264) 1920x1080 60fps 975kbps [V: h264 high L4.2, yuv420p, 1920x1080, 975 kb/s]
Audio: AAC 48000Hz stereo 150kbps [A: SoundHandler (aac, 48000 Hz, stereo, 150 kb/s)]
Audio: AAC 48000Hz stereo 243kbps [A: SoundHandler (aac lc, 48000 Hz, stereo, 243 kb/s)]
可以做些什么呢?或者也许有一些更好的方法来做这样的事情,有一个离开的范围列表(时间格式或帧格式开始:结束)

最佳答案

所有未标记的 filtergraph 输出流都将添加到第一个输出文件中。您有 4 个未标记的 filtergraph 输出流。
您可以使用:

ffmpeg -i input -filter_complex "[0:v:0]select='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)',setpts=N/FRAME_RATE/TB[outv]; [0:a:0]aselect='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)',asetpts=N/SR/TB[outa]" -map "[outv]" -map "[outa]" output.mp4
或者省略最终过滤器输出标签以依赖默认 stream selection行为:
ffmpeg -i input -filter_complex "[0:v:0]select='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)',setpts=N/FRAME_RATE/TB; [0:a:0]aselect='between(t,10.5,12.0)+between(t,12.5,15.0)+between(t,17.5,20.5)+between(t,23.0,25.0)',asetpts=N/SR/TB" output.mp4
  • 使用逗号 (,) 链接线性过滤器以创建过滤器链。
  • 用分号 (;) 分隔过滤器链。
  • 不要重复使用过滤器标签(“垫”):
  • 不正确:filtera[out0];[out0]filterb[out0]
  • 正确:filtera[out0];[out0]filterb[out1]


  • FFmpeg Filtering Documentation: Introduction .

    关于video - FFMPEG select between and setpts 创建流的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69426622/

    相关文章:

    java - Netbeans Windows 应用程序 Java 中的 Youtube 视频

    video - FFMPEG - 带有背景的淡化文本

    Python ImageIO 警告 :root:IMAGEIO FFMPEG_WRITER WARNING

    python-3.x - 如何使用 ffmpeg 提取帧序列并使用 subprocess.Popen 获取

    ffmpeg - 当我使用 ffmpeg 将 mp4 转换为 m3u8 格式时,在 out.m3u8 文件中只找到最后四个 .ts 文件为什么

    ios - 如何在 iOS 4.3/5 中手动循环播放 html5 视频?

    php - 发布带有youtube嵌入式视频的网站的网址时未显示缩略图

    video - 在特定时间准确剪切视频而不会降低质量

    ffmpeg - 使用 ffmpeg 剪切电影会导致音频/视频不同步

    iphone - CATextLayer 在 iOS7 中的视频中不可见