I am trying to generate a DASH manifest with ffmpeg using this command
/usr/bin/ffmpeg -f webm_dash_manifest -i ./480.webm -f webm_dash_manifest -i ./audio.webm -c copy -map 0:0 -map 1:0 -y -f webm_dash_manifest -adaptation_sets "id=0,streams=0 id=1,streams=1" ./manifest.mpd -loglevel repeat+level+verbose
I run this in go, in a docker container as shown:
func runFFmpeg(arguments []string) {
arguments = append(arguments, "-loglevel", "repeat+level+verbose")
cmd := exec.Command("ffmpeg", arguments...)
fmt.Printf("cmd: %v\n", cmd)
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
log.Println(err)
log.Println(stderr.String())
}
}
runFFmpeg([]string{"-f", "webm_dash_manifest", "-i", "./480.webm", "-f", "webm_dash_manifest", "-i", "./audio.webm", "-c", "copy", "-map", "0:0", "-map", "1:0", "-y", "-f", "webm_dash_manifest", "-adaptation_sets", "\"id=0,streams=0 id=1,streams=1\"", "./manifest.mpd"})
But I get this output:
cmd: /usr/bin/ffmpeg -f webm_dash_manifest -i ./480.webm -f webm_dash_manifest -i ./audio.webm -c copy -map 0:0 -map 1:0 -y -copy_unknown -f webm_dash_manifest -adaptation_sets "id=0,streams=0 id=1,streams=1" ./manifest.mpd -loglevel repeat+level+verbose
2023/02/22 04:45:17 exit status 1
2023/02/22 04:45:17 [info] ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
[info] built with gcc 12.2.1 (Alpine 12.2.1_git20220924-r3) 20220924
[info] configuration: --prefix=/usr --enable-avfilter --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-gpl --enable-libass --enable-libmp3lame --enable-libpulse --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --enable-libtheora --enable-libv4l2 --enable-libdav1d --enable-lto --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-libxcb --enable-librist --enable-libsrt --enable-libssh --enable-libvidstab --disable-stripping --disable-static --disable-librtmp --disable-lzma --enable-libaom --enable-libopus --enable-libsoxr --enable-libwebp --enable-vaapi --enable-vdpau --enable-vulkan --enable-libdrm --enable-libzmq --optflags=-O2 --disable-debug --enable-libsvtav1
[info] libavutil 57. 28.100 / 57. 28.100
[info] libavcodec 59. 37.100 / 59. 37.100
[info] libavformat 59. 27.100 / 59. 27.100
[info] libavdevice 59. 7.100 / 59. 7.100
[info] libavfilter 8. 44.100 / 8. 44.100
[info] libswscale 6. 7.100 / 6. 7.100
[info] libswresample 4. 7.100 / 4. 7.100
[info] libpostproc 56. 6.100 / 56. 6.100
[webm_dash_manifest @ 0x7fcec2836100] [warning] Could not find codec parameters for stream 0 (Video: vp9, 1 reference frame, none(tv, progressive, left), 640x480): unspecified pixel format
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
[info] Input #0, webm_dash_manifest, from './480.webm':
[info] Metadata:
[info] title : Big Buck Bunny, Sunflower version
[info] GENRE : Animation
[info] MAJOR_BRAND : isom
[info] MINOR_VERSION : 1
[info] COMPATIBLE_BRANDS: isomavc1
[info] COMPOSER : Sacha Goedegebure
[info] ARTIST : Blender Foundation 2008, Janus Bager Kristensen 2013
[info] COMMENT : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
[info] ENCODER : Lavf59.27.100
[info] Duration: 00:10:34.60, bitrate: 352 kb/s
[info] Stream #0:0: Video: vp9, 1 reference frame, none(tv, progressive, left), 640x480, SAR 853:640 DAR 853:480, 30 fps, 30 tbr, 1k tbn (default)
[info] Metadata:
[info] HANDLER_NAME : GPAC ISO Video Handler
[info] VENDOR_ID : [0][0][0][0]
[info] ENCODER : Lavc59.37.100 libvpx-vp9
[info] DURATION : 00:10:34.600000000
[info] webm_dash_manifest_duration: 634600
[info] webm_dash_manifest_initialization_range: 889
[info] webm_dash_manifest_file_name: 480.webm
[info] webm_dash_manifest_track_number: 1
[info] webm_dash_manifest_cues_start: 27924928
[info] webm_dash_manifest_cues_end: 27927508
[info] webm_dash_manifest_bandwidth: 738287
[info] webm_dash_manifest_cluster_keyframe: 1
[info] webm_dash_manifest_cue_timestamps: 67,5067,10067,15067,20067,25067,30067,35067,40067,45067,50067,55067,60067,65067,70067,75067,80067,85067,90067,95067,100067,105067,110067,115067,120067,125067,130067,135067,140067,145067,150067,155067,160067,165067,170067,175067,180067,185067,190067,195067
[info] Input #1, webm_dash_manifest, from './audio.webm':
[info] Metadata:
[info] title : Big Buck Bunny, Sunflower version
[info] GENRE : Animation
[info] MAJOR_BRAND : isom
[info] MINOR_VERSION : 1
[info] COMPATIBLE_BRANDS: isomavc1
[info] COMPOSER : Sacha Goedegebure
[info] ARTIST : Blender Foundation 2008, Janus Bager Kristensen 2013
[info] COMMENT : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
[info] ENCODER : Lavf59.27.100
[info] Duration: 00:05:35.91, bitrate: 120 kb/s
[info] Stream #1:0: Audio: vorbis, 48000 Hz, 5.1, fltp (default)
[info] Metadata:
[info] HANDLER_NAME : GPAC ISO Audio Handler
[info] VENDOR_ID : [0][0][0][0]
[info] ENCODER : Lavc59.37.100 libvorbis
[info] DURATION : 00:05:35.907000000
[info] webm_dash_manifest_duration: 335907
[info] webm_dash_manifest_initialization_range: 7411
[info] webm_dash_manifest_file_name: audio.webm
[info] webm_dash_manifest_track_number: 1
[info] webm_dash_manifest_cues_start: 5047497
[info] webm_dash_manifest_cues_end: 5048846
[info] webm_dash_manifest_bandwidth: 126994
[info] webm_dash_manifest_cluster_keyframe: 1
[info] webm_dash_manifest_cue_timestamps: 0,4986,9980,14962,19959,24956,29946,34930,39916,44911,49908,54892,59874,64868,69858,74858,79855,84847,89834,94834,99826,104826,109826,114818,119812,124799,129780,134770,139756,144743,149727,154719,159714,164706,169698,174687,179668,184667,189658,194650,19
HERE'S THE ERROR --> [error] Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted
[error] Error initializing output stream 0:1 --
[info] Stream mapping:
[info] Stream #0:0 -> #0:0 (copy)
[info] Stream #1:0 -> #0:1 (copy)
[error]
[AVIOContext @ 0x7fcebe23a840] [verbose] Statistics: 0 bytes written, 0 seeks, 0 writeouts
[AVIOContext @ 0x7fcebe23a980] [verbose] Statistics: 5940786 bytes read, 133 seeks
[AVIOContext @ 0x7fcebe23acc0] [verbose] Statistics: 2260628 bytes read, 72 seeks
It works perfectly however if I run it within docker exec (exec into the container and run the command in bash). Also, note in the last output that the command is well formed when I print it out from go. File permissions are also not the problem since the command to create the video variants works with os.exec i.e
runFFmpeg([]string{"-i", originalFilePath, "-c:v", "libvpx-vp9", "-keyint_min", "150", "-g", "150", "-tile-columns", "4", "-frame-parallel", "1", "-f", "webm", "-dash", "1", "-an", "-vf", fmt.Sprintf("scale=%s:%s", width, height), "-b:v", bitRate, "-dash", "1", "-y", destinationFilePath})