@@ -54,7 +54,7 @@ func videoTrimAction(ctx *cli.Context) error {
5454 }
5555
5656 filter := videoNormalizeFilter (filterArgs )
57- results , err := videoSearchResults (filter , ctx .Uint (videoCountFlag .Name ), ctx .Int (OffsetFlag .Name ), false )
57+ results , err := videoSearchResults (filter , ctx .Int (videoCountFlag .Name ), ctx .Int (OffsetFlag .Name ), false )
5858 if err != nil {
5959 return err
6060 }
@@ -216,14 +216,24 @@ func videoTrimFile(conf *config.Config, convert *photoprism.Convert, plan videoT
216216 }
217217
218218 destDir := filepath .Dir (plan .DestPath )
219- tempPath , err := videoTempPath (destDir , ".trim-*.tmp" )
219+ ext := filepath .Ext (plan .DestPath )
220+ if ext == "" {
221+ ext = filepath .Ext (plan .SrcPath )
222+ }
223+ if ext == "" {
224+ ext = ".tmp"
225+ }
226+
227+ tempPath , err := videoTempPath (destDir , ".trim-*" + ext )
220228 if err != nil {
221229 return err
222230 }
223231
224232 cmd := videoTrimCmd (conf .FFmpegBin (), plan .SrcPath , tempPath , start , remaining )
225233 cmd .Env = append (cmd .Env , fmt .Sprintf ("HOME=%s" , conf .CmdCachePath ()))
226234
235+ log .Debugf ("ffmpeg: %s" , clean .Log (cmd .String ()))
236+
227237 var stderr bytes.Buffer
228238 cmd .Stderr = & stderr
229239
@@ -308,9 +318,24 @@ func videoTrimCmd(ffmpegBin, srcName, destName string, start, duration time.Dura
308318 "-ignore_unknown" ,
309319 "-codec" , "copy" ,
310320 "-avoid_negative_ts" , "make_zero" ,
311- destName ,
312321 )
313322
323+ if videoTrimFastStart (destName ) {
324+ args = append (args , "-movflags" , "+faststart" )
325+ }
326+
327+ args = append (args , destName )
328+
314329 // #nosec G204 -- arguments are built from validated inputs and config.
315330 return exec .Command (ffmpegBin , args ... )
316331}
332+
333+ // videoTrimFastStart reports whether the trim output should enable faststart for MP4/MOV containers.
334+ func videoTrimFastStart (destName string ) bool {
335+ switch strings .ToLower (filepath .Ext (destName )) {
336+ case fs .ExtMp4 , fs .ExtMov , fs .ExtQT , ".m4v" :
337+ return true
338+ default :
339+ return false
340+ }
341+ }
0 commit comments